2009-02-12 149 views
29

我想有兩個外鍵相同的模式:如何在Django中使用同一模型的兩個外鍵?

class Test(models.model): 
    example1 = models.ForeignKey(Example) 
    example2 = models.ForeignKey(Example) 

我得到這樣的錯誤:

訪問器領域的「例1」與相關領域 「Example.test_set」的衝突。將'related_name'參數 添加到'example1'的定義中。

回答

17

Django使用一些Python的魔法來定義模型之間的關係,其中一些關係使用模型的名稱(這涉及到在「測試」中「 test__set'是來自於。)我猜想,發生了什麼事情是它試圖將「test__set」放入示例模型中兩次,一次爲您定義的每個外鍵。

錯誤消息建議嘗試:定義一個related_name參數(重寫其中一個'test_set's),它可以使用它來代替自動生成兩個碰撞名稱。

更多信息here

+2

此更多信息鏈接不再有效 – 2014-11-05 05:25:43

92

嘗試使用related_name

class Test(models.model): 
    example1 = models.ForeignKey('Example', related_name='example1') 
    example2 = models.ForeignKey('Example', related_name='example2') 
+1

我有兩種模式試圖做到這一點。第二個用這種方法可以正常工作:它必須將外鍵用於第一個模型。第一個模型不起作用。也許是因爲它指的是一個導入的模型。 有沒有人使用導入的模型進行了這項工作? – SpiRail 2013-01-31 00:26:00

7

就做什麼錯誤消息告訴你這樣做,如果你不確定是什麼意思,請查閱文檔related_name

相關問題