获取Python类型的Django模型字段?

时间:2015-07-23 13:40:42

标签: python django django-models

如何获得相应的Python类型的Django模型的字段类?

from django.db import models

class MyModel(models.Model):
    value = models.DecimalField()

type(MyModel._meta.get_field('value'))  # <class 'django.db.models.fields.DecimalField'>

我正在寻找如何获得字段值的相应python类型 - 在这种情况下为decimal.Decimal

有什么想法吗?

P.S。我尝试使用字段default属性解决此问题,但在字段未定义默认值的所有情况下,它可能无法工作。

2 个答案:

答案 0 :(得分:2)

我认为你不能以编程方式决定实际的python类型。部分原因是由于python的动态类型。如果查看converting values to python objects的文档,则字段没有硬预定义类型:您可以编写自定义字段,根据数据库值返回不同类型的对象。 model fields的文档指定了Python类型对应于每种字段类型的内容,因此您可以执行此操作&#34;静态&#34;。

但是为什么你需要提前知道Python类型才能序列化它们?序列化模块应该为您执行此操作,只需将它们扔给您需要序列化的对象。 Python是一种动态类型语言。

答案 1 :(得分:0)

一个丑陋的替代方法是检查字段的 repr():

if 'DecimalField' in repr(model._meta.get_field(fieldname)):
    return decimal.Decimal
else:
    ...

但是,您必须针对所有类型单独执行此操作。