python - 一个模型如何可以有多个键,并以相同类型的模型作为值?

标签 python mysql sql django

我正在制作一个应用程序,我应该制作一个 Model,它有 2 个保存相同类型模型的键。

用英语不太容易表达,所以我会上传情况的图片。

enter image description here

食物对模型中(或者我认为我们可以称之为表)

我想引用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/

相关文章:

python - 为什么 Pandas 中我的列数据相差一?

python - IO错误 : [Errno 28] No space left on device while installing TensorFlow

mysql - 错误 1093 使用数据聚合更新表

sql - 从 URL(Azure 存储)还原数据库失败,没有更多详细信息

python - 是否存在无法创建深拷贝的对象?

python - 在asyncio中使用run_in_executor时,事件循环是否在主线程中执行?

mysql - Nginx rtmp模块(m3u8)在本地播放?

mysql计算一个月中不同的天数

php - 您的 SQL 语法有误;查看与您的 MariaDB 服务器版本对应的手册

sql - 有没有一种通用的方法可以在 SQL 中生成任意线性序列?