-1

我想建立一个饮料数据库,现在我遇到了数据库没有相应生成的问题,我不知道该怎么做。

我已经尝试了几件事,但不幸的是没有找到解决方案

数据库应该是这样的:



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 张桌子。就像在顶部一样。

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

一种饮料的每种成分只能有一个数量。

谢谢你 :))

4

1 回答 1

0

我不确定你为什么想要一张单独的drink_ratio桌子。量是饮料和配料之间联系元素的一个属性,因此属于通表(表4);表 3 根本不需要。您可以使用以下through参数在 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。)

于 2019-05-31T10:24:21.993 回答