2014-01-13 2 views
3

장고 모델은 10 개의 날짜 유형, 60 개의 문자 유형, 70 개의 숫자 유형을 포함하는 140 개의 열로 구성됩니다.Django 모델 데이터 유형을 확인하는 방법은 무엇입니까?

class SOA_detail(models.Model): 
    ... 

이 데이터 유형별로 그룹 최대 수있는 방법이며, list에 열 이름을 넣습니다.

char_fields = [] # storage for character fields column name 
num_fields = [] # storage for number fields column name 
date_fields = [] # storage for date fields column name 

지금까지 내가 알고있는 열 이름을 사용하는 것입니다.

# take all field names from model 
for model_field in SOA_detail._meta._fields(): 
     if #datatype is char: ---?? 
      char_fields.append(model_field.name) 
     elif #datatype is num: ---?? 
      num_fields.append(model_field.name) 
     elif #datatype is date: ---?? 
      date_field.append(model_field.name) 

내 질문을 읽어 주셔서 감사합니다.

for model_field in SOA_detail._meta._fields(): 
    if isinstance(model_field, CharField): 
     char_fields.append(model_field.name) 
    elif isinstance(model_field, IntegerField): 
     num_fields.append(model_field.name) 
    elif isinstance(model_filed, DateTimeField): 
     date_field.append(model_field.name) 

답변

5

객체가 특정 클래스 또는하지의 인스턴스가이 방법을 사용하는 경우 당신이 이런 식으로 작업을 수행 할 수 있습니다 확인 isinstance라는 파이썬의 내장 방법이있다. 예를 들어

:

>>> from django.db import models 
>>> from django.contrib.auth.models import User 
>>> [f.name for f in User._meta.fields if isinstance(f, models.CharField)] 
['password', 'username', 'first_name', 'last_name', 'email'] 
>>> [f.name for f in User._meta.fields if isinstance(f, models.DateTimeField)] 
['last_login', 'date_joined'] 
>>> [f.name for f in User._meta.fields if isinstance(f, models.IntegerField)] 
[] 
>>> [f.name for f in User._meta.fields if isinstance(f, models.AutoField)] 
[u'id'] 
관련 문제