Python 使用Django(多对多)正确组装饮料数据库

Python 使用Django(多对多)正确组装饮料数据库,python,django,database,many-to-many,Python,Django,Database,Many To Many,我想建立一个饮料数据库,现在我有一个问题,数据库没有相应地生成,我不知道如何做到这一点 我已经试过几种方法,但不幸的是没有找到解决办法 数据库应该是什么样子的: Table 1 (Drinks) ----------------------------------------------------------- drink_Id | drink_name | description | image_path | slug | -----------------------------

我想建立一个饮料数据库,现在我有一个问题,数据库没有相应地生成,我不知道如何做到这一点

我已经试过几种方法,但不幸的是没有找到解决办法

数据库应该是什么样子的:



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 |
-----------------------------------------

代码:

我想实现我只有4张桌子。 就像在顶端一样

一种饮料可以有几种成分。 一种饮料只能存在一次

一种饮料每种成分只能有一种量


谢谢:)

我不知道你为什么想要一张单独的
酒水比例表。数量是饮料和配料之间连接元素的属性,因此属于贯穿表(表4);表3完全不是必需的。您可以在Django中使用
参数对此进行建模:

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。)

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)