2014-01-13 5 views
3

У меня есть модель django, состоящая из 140 столбцов, которые содержат 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

Смежные вопросы