使用ManyToManyFields的第二范式的模型设置

时间:2015-04-06 17:29:02

标签: django

我是数据库的新手,也是Django的新用户。我需要你的帮助。

我希望有一个人数据库,例如人不同的衬衫。衬衫有不同的长度。

例如彼得有三件衬衫。红色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)

谢谢

1 个答案:

答案 0 :(得分:0)

可能最好的解决方案是:

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)更好,但如果它&#39} ; s与唯一名称密切相关,那么您的版本就可以了。 答案是你需要将每件衬衫作为单一条目。并且说每件衬衫TYPE应该是单个条目更为正确。因为如果彼得和马克斯的红色T恤没有区别,那么红色T恤就是一个单独的入口,不依赖于人的财物。

BTW class以小写字母开头。