我想建立一个饮料数据库,现在我遇到的问题是数据库没有相应生成,我也不知道该怎么做。
我已经尝试了好几种方法,但不幸的是没有找到解决方法
数据库的外观:
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张桌子的功能。 就像在顶部一样。
饮料可以有几种成分。 一杯酒只能存在一次。
一种饮料只能含一种成分。
谢谢:))
答案 0 :(得分: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命名为单数形式。)