2012-07-08 40 views
0

我試圖讓有2個ManyToMany字段的模型沒有允許倒退關係。 因此,這裏的模型:兩個ManyToMany字段沒有倒退關係

Error: One or more models did not validate: camps.camp: Accessor for m2m field 'free_options' clashes with related m2m field 'Option.+'. Add a related_name argument to the definition for 'free_options'. camps.camp: Reverse query name for m2m field 'free_options' clashes with related m2m field 'Option.+'. Add a related_name argument to the definition for 'free_o ptions'.

是沒可能有2場沒有倒退:

class Camp(models.Model): 
#... 

free_options = models.ManyToManyField('Option', related_name='+') 
paid_options = models.ManyToManyField('Option', related_name='+') 

試圖做

python manage.py syncdb

我收到以下錯誤後關於同一模型?我怎樣才能解決這個問題?

謝謝!

+0

不知道這是否會幫助,但嘗試[通過](https://docs.djangoproject.com/en/1.4/ref/models/fields/#django.db.models.ManyToManyField.through) – aisbaa 2012-07-08 11:50:05

+0

我已經將我的related_name值更改爲'camp_free_options'和'camp_paid_options',所以我不打算使用向後關係。但是,如果你有任何解決方案,那麼我將能夠使用倒退關係,請告訴我們。 – Matan 2012-07-08 12:17:32

+0

@aisbaa我不明白related_name和through之間的區別。 – Matan 2012-07-08 12:18:22

回答

0

我會問爲什麼你有反向關係困擾,只是不使用它,如果你不想要它。但要回答這個問題,沒有辦法完全消除它。

+0

好的,謝謝。這就是我所做的。我還提到了related_name值,因爲我有2個ManyToMany字段,如上所述。 – Matan 2012-07-08 20:44:22

+0

[文檔](https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name)聲明可以刪除後向關係,也許django團隊有點欺騙。 – aisbaa 2012-07-09 10:13:22

0

根據Django文檔的related_name argument of the ManyToManyField

If you have more than one ManyToManyField pointing to the same model and want to suppress the backwards relations, set each related_name to a unique value ending with '+'

重點煤礦。

所以,如果你想這樣做,你應該能夠簡單:

class Camp(models.Model): 
    #... 

    free_options = models.ManyToManyField('Option', related_name='free_options+') 
    paid_options = models.ManyToManyField('Option', related_name='paid_options+') 
    #                ^^^^^^^^^^^^ 

壓制在同一個模型上的多個ManyToManyField的向後關係。

希望這會有所幫助!