2014-01-13 24 views
3

我有一個由140列組成的django模型,其中包含10個日期類型,60個字符類型,70個數字類型。如何檢查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) 

謝謝你的時間閱讀我的問題。

回答

5

在Python一個內置的方法叫做isinstance你可以像這樣做哪些檢查對象是否是一個特定的類或沒有的情況下,使用這種方法:

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) 
3

使用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'] 
+0

這是一個很好的例子,先生。 – Charlesliam