ManyToManyFields第二范式的模型设置
问题描述:
我是新来的数据库和Django的新。我需要你的帮助。ManyToManyFields第二范式的模型设置
我想要例如一个数据库与人有例如不同的衬衫。衬衫有不同的长度。
例如彼得有三件衬衫。红色的T恤,蓝色的长袖衬衫和蓝色的T恤。
马库斯也有一件红色的衬衫,但它应该只有长袖。
如何创建一个模型,其中第二个标准化的Foreign或ManyToManyField可以具有不同的值,具体取决于顶级(Person)数据?
或者我是否需要将每件衬衫作为不同的条目(蓝色长条形,蓝色短条形等)并将其与此人联系?
Django通常创建一个附加表格,其ID为人物ID和衬衫ID。 有没有办法为袖子添加第三排呢?
我的Django模型是这样的:
Class Length(models.Model):
name_length = models.CharField(max_length=10) # e.g. short, long, half
Class Shirt(models.Model):
name_shirt = models.CharField(max_length=20) # e.g. red-one, blue-one
shirt_length = models.ManyToManyField(Length)
Class Person(models.Model):
name = models.CharField(max_length=20)
persons_shirt = models.ManyToManyField(Shirt)
谢谢
答
也许是最好的解决办法是:
class Length(models.Model):
name_length = models.CharField(max_length=10)
class Shirt(models.Model):
name_shirt = models.CharField(max_length=20)
shirt_length = models.ForeignKey(Length)
class Person(models.Model):
name = models.CharField(max_length=20)
persons_shirt = models.ManyToManyField(Shirt)
所以我们在这里,Shirst是独立instanse,只取决于长度,如果name_shirts
与颜色有关,也许最好是ForeignKey(Color)
,但如果它与名称很接近,那么你的版本是 好的。 答案是,你需要将每件衬衫都作为单一条目。而且,说每个shirt类型应该是单个条目会更准确。因为如果彼得和马库斯的红色T恤之间没有区别,那么这件红色T恤是一个单独的入口,不依赖于人的物品。
BTW class
以小写字母开头。