Невозможно создать несколько объектов с одинаковым именем, используя ForeignKey - PullRequest
0 голосов
/ 19 декабря 2018

Я создаю веб-сайт для размещения различных меню из ресторанов в моем городе.В приведенном ниже коде Restaurant - это заведение, MenuSection - это раздел, например Закуски, Закуски, Десерты и т. Д., А FoodItem - это блюдо, которое вы можете заказать, принадлежащее одному из разделов меню.Я пытаюсь подключить каждый MenuSection к Restaurant и каждый FoodItem к MenuSection и Restaurant.Я думал, что этого можно достичь, используя ForeignKey, так как это отношение многие-к-одному.

Очевидно, что разделы еды и продукты питания пересекаются между ресторанами.Я думал, что это не будет проблемой, но в моем БД у меня есть два Restaurant объекта, один уже имеет 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 голосов
/ 19 декабря 2018

Вы устанавливаете ForeignKey s в качестве первичных ключей.Я не пробовал это, но я полагаю, это превращает их в OneToOneField.Попробуйте удалить primary_key=True из определений ForeignKey.

Также я заметил, что вы привязываете ресторан дважды (в MenuSection и в MenuItem).Вы можете установить ресторан только на MenuSection и получить к нему доступ с MenuItem, например menu_item.MenuSection.restaurant.

...