Django - 如何从模型中获取所有字段

时间:2010-12-13 13:16:38

标签: python 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 个答案:

答案 0 :(得分:2)

您可以在模型类的_meta属性上使用半文档化的非公共API:

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

答案 1 :(得分:0)

查看未记载的A._meta.fields:

  

foreignkeys = [f,如果f.attname.endswith('_ id')],则为A._meta.fields中的f

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