无法使用ForeignKey

时间:2018-12-18 22:58:55

标签: django django-models foreign-keys

我正在创建一个网站来托管我镇餐馆的不同菜单。在下面的代码中,Restaurant是餐厅,MenuSection是开胃菜,主菜,甜点等部分,而FoodItem是您可以订购的属于以下其中一个菜式菜单上的小节。我正在尝试将每个MenuSection连接到Restaurant,并将每个FoodItem连接到MenuSectionRestaurant。我认为可以使用ForeignKey来实现,因为这是多对一的关系。

很明显,餐厅之间的食物区域和食物项目重叠。我以为这不是问题,但是在我的数据库中,我有两个Restaurant对象,一个已经有一个名为“ Appetizers”的MenuSection,我试图给第二个餐厅命名为MenuSection “开胃菜”,但我不会这样说:“ MenuItem和这个MenuSection已经存在。”我怎样才能解决这个问题?在此先感谢您的帮助。

from django.db import models


class Restaurant(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

    def __str__(self):
        return  self.name

class MenuSection(models.Model):
    restaurant = models.ForeignKey(
        Restaurant,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    food_type = models.CharField(max_length=50)
    def __str__(self):
        return self.food_type


class MenuItem(models.Model):
    restaurant = models.ForeignKey(
        Restaurant,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    MenuSection = models.ForeignKey(
        MenuSection,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    food_item = models.CharField(max_length=50)
    def __str__(self):
        return self.food_item

1 个答案:

答案 0 :(得分:0)

您将ForeignKey设置为主键。我没有尝试过,但我想它可以将它们变成OneToOneField。尝试从primary_key=True的定义中删除ForeignKey

我还注意到您绑定了餐厅两次(在MenuSectionMenuItem中)。您只能在MenuSection中设置餐厅,并从MenuItem访问餐厅,例如menu_item.MenuSection.restaurant