2013-04-09 62 views
0

我需要動態檢查Python類型的所有字段我的模型內的應用程序,也就是因爲我有:如何獲得原始類型的模型的在Django

class MyModel(model.Model): 
    field1 = model.CharField(max_length=20) 
    field2 = modelf.IntegerField() 
    ... 
    fieldn = models.BooleanField() 

我需要完成這樣的:

>>> for field in MyModel._meta.fields: 
•••  field.type 
••• 
<type 'str'> 
<type 'int'> 
... 

明顯field.type是一些不存在的,但我需要檢索的內置式模型被認爲是更新創建模型時接受/。 ForeignKeys和M2M是這個問題可以忽略的特例。

感謝您的任何幫助。

+1

你能解釋一下爲什麼你需要這個嗎?也許如果我們知道你在做什麼,我們可以找出一個更好的方法來做到這一點。 – 2013-04-10 08:59:56

回答

0

對不起,Field s不包含此類信息。 to_python方法用於將值轉換爲預期的Python數據類型,並且可以自由返回任何喜歡的值。

您可以構建一個類型映射自己,顯然僅限於字段類型你知道:

FIELD_PYTHON_TYPES = { 
    'AutoField': int, 
    'BooleanField': bool, 
    'CharField': unicode, 
    'DateField': datetime.date, 
    'DateTimeField': datetime.datetime, 
    'DecimalField': decimal.Decimal, 
    'FloatField': float, 
    'IntegerField': int, 
    'BigIntegerField': int, 
    ... # etc. 
} 

,並從中查找類型的get_internal_type

for field in MyModel._meta.fields: 
    FIELD_PYTHON_TYPES[field.get_internal_type()] 

但是即使,例如,內置NullBooleanField可以使用兩種類型(boolNoneType),所以它遠非一般的解決方案。