是否有一种简单的方法可以从某个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
。
答案 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()或阅读源代码来发现...