![](/img/trans.png)
[英]How can I split a python dictionary with multiple text-list values to have separate dictionaries of keys that have the same values?
[英]How can a model have multiple keys with the same type of models as values?
我在做一個應用程序,我應該做一個Model
,其有2個按鍵,節省了相同類型的模型。
用英語表達不容易,所以我將上傳情況圖片。
在Food Pair Model
(或者我可以稱其為表)
我想引用Food Model
但無法使用ForeignKey或ManyToManyField 。
ERRORS:
food_test.FoodQuestion.left_food: (fields.E304) Reverse accessor for 'FoodQuestion.left_food' clashes with reverse accessor for 'FoodQuestion.right_food'.
HINT: Add or change a related_name argument to the definition for 'FoodQuestion.left_food' or 'FoodQuestion.right_food'.
food_test.FoodQuestion.right_food: (fields.E304) Reverse accessor for 'FoodQuestion.right_food' clashes with reverse accessor for 'FoodQuestion.left_food'.
HINT: Add or change a related_name argument to the definition for 'FoodQuestion.right_food' or 'FoodQuestion.left_food'.
我不知道在這種情況下使用什么數據庫關系以及如何創建它。
在這種情況下我可以使用什么?
您必須為FoodPair模型中的每個ForeignKey字段定義一個唯一的related_name。
class FoodPair(models.Model):
first_food = models.ForeignKey(Food, related_name="first_food")
second_food = models.ForeignKey(Food, related_name="second_food")
what_i_buy = models.ForeignKey(Food, related_name="what_i_buy")
如果未定義related_name,則Django會自動對其進行設置,並且當有多個ForeignKey字段指向同一模型時,名稱會發生沖突。
當您從一個模型創建到另一個模型的ForeignKey
,Django會在所引用的模型上動態創建一個屬性,該屬性將返回QuerySet
以及所有具有該對象外鍵的對象
例如
class Foo(models.Model):
pass
class Bar(models.Model):
foo = models.ForeignKey(Foo, on_delete=models.CASCADE)
foo = Foo.objects.create()
bar = Bar.objects.create(foo=foo)
foo.bar_set.all() # This will return a queryset containing foo
默認情況下,此屬性為<model_name_lowercase>_set
。 在您的情況下,因為從一個模型到同一模型有2個外鍵,Django嘗試在Food
模型上為每個外鍵創建相同的屬性。
要解決此問題,您可以使用related_name
來指定此屬性的名稱,如果將此屬性設置為“ +”,則不會建立任何反向關系,也不能給它們指定唯一的名稱
class FoodQuestion(models.Model):
left_food = models.ForeignKey(Food, on_delete=models.CASCADE, related_name='+')
left_food = models.ForeignKey(Food, on_delete=models.CASCADE, related_name='+')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.