我需要动态检查应用中模型中所有字段的python类型,也就是说,我有:
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是一个特殊情况,可以忽略这个问题。
感谢您的帮助。
答案 0 :(得分:0)
抱歉,Field
不包含此类信息。 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
也可以使用两种类型(bool
和NoneType
),因此它远非一般解决方案。