2010-12-13 1043 views
1

是否有一种简单的方法来获取某个django模型中的所有字段,即使是通过外键或多个字段设置的其他关系也可以获得所有字段:Django - 如何获取模型中的所有字段

实施例:

class A(models.Model): 
    some_number = models.IntegerField() 

class B(models.Model): 
    link_to_a = models.ForeignKey(A, related_name="link_to_b") 

调用方法为A将返回id, some_number, link_to_b

回答

2

可以使用半记录,非公开的API模型类的_meta属性:

from myapp.models import A 

for f in A._meta._fields(): 
    print f.name 

(注意,有在Django现有的工作项目来记录这个API:http://code.djangoproject.com/ticket/12663

尽管如此,您仍然需要手动关注关系,并拉入其字段名称。

关系领域将有一个rel属性:

from myapp.models import A 

for f in A._meta._fields(): 
    print f.name 

    if hasattr(f, 'rel'): 
     print "Grab more fields from " + rel.to.name 
     g in rel.to._meta._fields(): 
      print g.name 
+0

这只会返回模型自己的字段唉。 – 2010-12-13 13:23:12

+0

更新后,您可以在字段上查找“rel”属性以查找相关模型,然后再遍历其字段。 – 2010-12-13 13:32:04

+0

感谢您的帮助。这是有用的,但仍不能解决问题。未找到模型B的字段,因为它们未列在A的字段树中(因为它在B上声明而不在A上)。 – 2010-12-13 13:40:36

0

看的非常无证A._meta.fields:

foreignkeys = [F在A._meta.fields˚F如果f .attname.endswith('_ id')]

这些字段有许多有趣的方法,您必须通过使用dir()或读取源代码来发现...

相关问题