Правильная сборка базы данных напитков с Django (многие ко многим) - PullRequest
0 голосов
/ 31 мая 2019

Я хотел бы настроить базу данных напитков, теперь у меня проблема в том, что базы данных не создаются соответствующим образом, и я не знаю, как это сделать.

Я уже пробовал несколько вещей, но, к сожалению,не найдено решение

как должна выглядеть база данных:



Table 1 (Drinks)

-----------------------------------------------------------
drink_Id |  drink_name  | description | image_path | slug |
-----------------------------------------------------------

Table 2 (ingredients)
---------------------------------
ingredient_id | ingredient_name |
---------------------------------

Table 3 (drink_ratio)
---------------------
ID_ratio | quantity | 
---------------------

Table 4 ()
-----------------------------------------
id | drink_id | ingredient_id | ID_ratio |
-----------------------------------------

Код:




from django.db import models


class Drinks(models.Model):
    drink_name = models.CharField(max_length=256, unique=True)
    description = models.TextField()
    image_path = models.ImageField(upload_to="./images")
    slug = models.SlugField(unique=True)
    ingredient = models.ManyToManyField('ingredient')


    def __str__(self):
        return self.drink_name



class ingredient(models.Model):
    name = models.CharField(max_length=256, unique=True)

    liquid_ratio = models.ManyToManyField('liquid_ratio')


    def __str__(self):
        return self.name


class liquid_ratio(models.Model):
    quantity = models.DecimalField(max_digits=4, decimal_places=2, unique=True)

Я хочу добиться того, чтобы у меня было только 4 таблицы.как наверху.

В напитке может быть несколько ингредиентов.Напиток может существовать только один раз.

В напитке может быть только одно количество ингредиента.

СПАСИБО :))

1 Ответ

0 голосов
/ 31 мая 2019

Я не уверен, зачем вам отдельная таблица drink_ratio. Количество является свойством связующего элемента между напитком и ингредиентом и, следовательно, принадлежит сквозной таблице (таблица 4); Таблица 3 не требуется вообще. Вы можете смоделировать это в Django, используя параметр through:

class Drink(models.Model):
    drink_name = models.CharField(max_length=256, unique=True)
    description = models.TextField()
    image_path = models.ImageField(upload_to="./images")
    slug = models.SlugField(unique=True)
    ingredient = models.ManyToManyField('Ingredient', through='IngredientRatio')

    def __str__(self):
        return self.drink_name   

class Ingredient(models.Model):
    name = models.CharField(max_length=256, unique=True)

    def __str__(self):
        return self.name

class IngredientRatio(models.Model):
    quantity = models.DecimalField(max_digits=4, decimal_places=2, unique=True)
    ingredient = models.ForeignKey('Ingredient', on_delete=models.CASCADE)
    drink = models.ForeignKey('Drink', on_delete=models.CASCADE)

(Обратите внимание, что модели Django должны быть названы в единственном числе и с CamelCase.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...