2010-12-13 95 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()或讀取源代碼來發現...

相關問題