我正在制作一个应用程序,我应该制作一个 Model
,它有 2 个保存相同类型模型的键。
用英语不太容易表达,所以我会上传情况的图片。
在食物对模型
中(或者我认为我们可以称之为表)
我想引用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'.
我不知道在这种情况下使用什么数据库关系以及如何制作它。
我可以用什么来处理这个案例?
最佳答案
当您创建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='+')
关于python - 一个模型如何可以有多个键,并以相同类型的模型作为值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57365062/