Django模型:多对多还是多对一?

时间:2010-04-23 23:37:25

标签: django django-models

我只是在学习django并遵循教程。我有一个链接和一个书签。与我正在关注的教程不同,我希望链接只与一个书签相关联,但书签可以有多个链接。这是设置模型的方法吗?

class Link(models.Model):
    url = models.URLField(unique=True)
    bookmark = models.ForeignKey(Bookmark)

class Bookmark(models.Model):
    title = models.CharField(maxlength=200)
    user = models.ForeignKey(User)
    links = models.ManyToManyField(Link)

4 个答案:

答案 0 :(得分:6)

没有。从书签模型中删除links,并访问特定书签的链接对象,您将使用bookmark.link_set.all()(其中书签是特定的书签对象)。 Django为你填充反向关系。

或者,如果您这样选择,请在bookmark ForeignKey中提供您自己的related name,如果您不喜欢“link_set”,请提供“链接”。

答案 1 :(得分:4)

足以在其中一个模型中定义关系。 Django会自动在另一个模型中创建一个属性。

如果您希望链接仅与一个书签相关联,请在Link中定义一个引用Bookmark对象的外键:

class Bookmark(models.Model):
    title = models.CharField(max_length=200)
    user = models.ForeignKey(User)

class Link(models.Model):
    url = models.URLField(unique=True)
    bookmark = models.ForeignKey(Bookmark)

要访问书签的链接,请使用bookmark.link_set。该属性由Django自动创建。

答案 2 :(得分:1)

不,从links =中删除Bookmark语句 - 在书签中为您预定义的内容是属性link_set,它是对其书签为此链接的查询(您可以重命名)那个属性,但实际上没有必要)。

答案 3 :(得分:1)

如果我更改代码 例如:     class Bookmark(models.Model):         title = models.CharField(max_length = 200)

class Link(models.Model):
    url = models.URLField(unique=True)
    bookmark = models.ForeignKey(Bookmark)

对他们来说是正确的关系,