如何获得相应的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
属性解决此问题,但在字段未定义默认值的所有情况下,它可能无法工作。
答案 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:
...
但是,您必须针对所有类型单独执行此操作。