我能从Django模型查询集中获取模型字段类型吗?

18

我可以从Django的模型查询集中获取模型字段类型吗?

举个例子:假设ab模型的查询集,而b模型有以下字段:

  • f:字符型字段(CharField)
  • g:外键字段(ForeignKey)
  • h:多对多关系字段(ManyToMany)

是否有办法从查询集a中获取字段g的类型?谢谢。


你为什么需要字段类型?直接检查结果并从结果中确定字段类型不是更容易吗? - Dean
2个回答

39

我的回答如下:

a.model._meta.get_field('g').get_internal_type()

1
我是Python的新手,但我认为前导下划线意味着“不要使用”。 - TimP
3
通常情况下,前导下划线确实意味着“不要使用”。但是,我从阅读SO的文章中了解到,在过去的几个版本中,_meta对象在Django中变得越来越标准,并且在Django内部广泛使用。我的建议是,您应该放心使用它,但是在升级Django版本时一定要运行测试(您正在编写单元测试,对吗?)。但总体而言,确实应避免在Python第三方库中使用以单个下划线开头的符号。 - wkschwartz

3
fields = [f.attname for f in Experience._meta.fields]
file_fields = []
print("FILE FIELDS : ", fields)
for field in fields:
    get_type = Experience._meta.get_field(field)
    print("GET TYPE :", get_type)
    field_type = get_type.__class__.__name__
    print(field, "FILE TYPE : ", field_type)
    if field_type == "FileField":
        file_fields.append(field)

这段代码可以获取Django模型的字段类型。


这个很棒! - JZoares

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接