我正在创建一个网站,其中包含我镇餐馆的菜单集。如您所知,每家餐厅都有一个菜单,该菜单包含多个部分(开胃菜,主菜等),每个部分下都有不同的项(即,在“开胃菜”下为:莫扎里拉奶酪棒,玉米片等)。我有以下模型。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的菜单项已存在。”我怎样才能解决这个问题?在此先感谢您的帮助。
答案 0 :(得分:2)
您不能将其设为主键,只需将其取出并让Django自动生成主键即可。由于它是一对多的,因此对于添加到每个餐厅,您将获得一个带有一个“开胃菜”条目的表。另外,您也可以将其设置为多对多,并且所有带有开胃菜部分的餐厅都将指向表中相同的菜单部分