2012-02-16 9 views
0

私はquestion earlier to programmatically identity foreignkey links.に尋ねた。プログラムでdjangoの外部リンクを特定するが、テーブルを省略する

私は以下のコードは、すべての1対多のリンクを引くことがわかった:

yourModel._meta.get_all_related_objects() 

私も今探してる唯一の問題は、それがまた-に多くしようとしているinteremdiaryテーブルが含まれていることです - 多くのリンク。だから、私は以下のモデルを持っている場合

class Model_one(models.Model): 
    name = models.CharField("Name", max_length=30) 
    people = models.ManyToManyField('Model_two', blank=True, through='Association') 

戻り値は返されず、Associationが返されます。 「実際の」一対多リンクを指定する方法や、それ以外の方法でテーブルを省略する方法はありますか?返されたyourModel._meta.get_all_related_objects()から手動で削除する必要がある場合でも、

これを尋ねる別の方法:実際に「スルー」テーブルであるリンクを特定/分離するにはどうすればよいですか?

答えて

1

あなたはそれが_meta.get_all_related_many_to_many_objects()にだかどうかを確認するために、各項目をテストすることができます。

related_m2ms = MyModel._meta.get_all_related_many_to_many_objects() 
for related in MyModel._meta.get_all_related_objects(): 
    if related not in related_m2ms: 
     # Do something here with only one-to-many relationships 
+0

MyModel._meta.get_all_related_objects()が1対多のリレーションシップのみを取得することがわかりました。したがって、MyModel._meta.get_all_related_many_to_many_objects()は、中間テーブルを経由しない多対多リンクを返しますが、単純な多対多と一対多の比較は有用ではありません。 MyModel._meta.get_all_related_objects()は、 "through"テーブルを含むすべての一対多を返します。どのようにスルーテーブルを省略するのですか? –

0

は正しい方向に私を導いたquestionが見つかりました:

m2m_links =MyModel._meta.local_many_to_many 
for r in m2m_links: 
    if not r.rel.through._meta.auto_created: 
     print r.rel.through._meta.object_name 

これは "の名前を与えます"テーブル"

関連する問題