0

我需要在应用程序中动态检查模型中所有字段的 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 是这个问题可以忽略的特殊情况。

谢谢你的帮助。

4

1 回答 1

0

抱歉,Fields 不包含此类信息。该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),所以它远不是一个通用的解决方案。

于 2013-04-09T22:41:37.610 回答