我正在创建一个网站来托管我镇餐馆的不同菜单。在下面的代码中,Restaurant
是餐厅,MenuSection
是开胃菜,主菜,甜点等部分,而FoodItem
是您可以订购的属于以下其中一个菜式菜单上的小节。我正在尝试将每个MenuSection
连接到Restaurant
,并将每个FoodItem
连接到MenuSection
和Restaurant
。我认为可以使用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
答案 0 :(得分:0)
您将ForeignKey
设置为主键。我没有尝试过,但我想它可以将它们变成OneToOneField
。尝试从primary_key=True
的定义中删除ForeignKey
。
我还注意到您绑定了餐厅两次(在MenuSection
和MenuItem
中)。您只能在MenuSection
中设置餐厅,并从MenuItem
访问餐厅,例如menu_item.MenuSection.restaurant
。