基本模型设计:书籍和类别

时间:2012-01-03 05:32:53

标签: django django-models

我没有参加任何数据库课程。请原谅......

从Django Book教程,我们有一个书籍应用程序,最初有三个类(书籍,出版商和作者)。

class Book(models.Model):
    title = models.CharField(max_length=100)
    # categories = models.ManyToManyField(Category)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication = models.DateField()

我们可以将书籍与许多作者匹配,而我们只能将书籍与出版商匹配。

一本书可以有几个类别,所以写上面我评论过的内容似乎很自然。

class Category(models.Model):
    name = models.CharField(max_length=40)

第二次尝试:

我记得在某个地方读过这个(vaugly):创建BookCategories,它将Category作为ForeignKey。

Book --> --> BookCategories  --> Categroy

(符号:双箭头= ManyToMany和单箭头= ForeginKey)

哪一个更好?如果没有,我该如何处理?我的逻辑缺陷在哪里?如果第二次尝试更好,那是什么原因?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

我相信你所描述的方法或多或少相同。多对多字段始终需要插页式或“直通”表来存储两种对象类型之间的链接。

在您描述的第一种方法中,Django将在您运行syncdb时自动创建直通表。在第二种方法中,您只是手动定义了该表(尽管如您所指定的那样,您将拥有一个冗余表)。第二种方法在某些情况下很有用,因为这意味着您不仅可以定义链接,还可以存储有关该链接的信息。在这种情况下,您可能会有一个字段,用于存储首次将图书添加到某个类别的时间或添加该图书的用户。

有关详细信息,请查看Django docs on many-to-many through tables