使用ForeignKey

时间:2018-12-14 18:38:49

标签: django django-models

我正在创建一个网站,其中包含我镇餐馆的菜单集。如您所知,每家餐厅都有一个菜单,该菜单包含多个部分(开胃菜,主菜等),每个部分下都有不同的项(即,在“开胃菜”下为:莫扎里拉奶酪棒,玉米片等)。我有以下模型。py:

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

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

1 个答案:

答案 0 :(得分:2)

您不能将其设为主键,只需将其取出并让Django自动生成主键即可。由于它是一对多的,因此对于添加到每个餐厅,您将获得一个带有一个“开胃菜”条目的表。另外,您也可以将其设置为多对多,并且所有带有开胃菜部分的餐厅都将指向表中相同的菜单部分