2010-12-13 19 views
1

特定のdjangoモデルからすべてのフィールドを取得する簡単な方法はのforeignkeyまたはmany to many fieldsで設定されたものでもですか?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

あなたはモデルクラスの_meta性質上半文書化、非パブリックAPIを使用することができます。

from myapp.models import A 

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

(注、このAPIを文書化するジャンゴの既存の作業項目があります:http://code.djangoproject.com/ticket/12663

あなたは手動でリレーションをフォローし、フィールド名を引き出す必要があります。

関係フィールドはrel性質を持っています。非常に文書化されていないA._meta.fieldsで

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

これは、モデルの独自のフィールドだけを返します。 –

+0

更新されました。関連するモデルを見つけるためにフィールド上の "rel"プロパティを探して、そのフィールドを歩くこともできます。 –

+0

助けてくれてありがとう。それは便利ですが、まだ問題を解決しません。モデルBのフィールドは、Aのフィールドのツリーにリストされていないため(Bでは宣言されていてAではないため)、フィールドは見つかりません。 –

0

ルック:F場合A._meta.fieldsでfに対するF

のForeignKey =を[ .attname.endswith( '_ id')]

フィールドには、dir()を使用して検索する必要がある興味深い方法が多数あります。

関連する問題