首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django模型:多对多还是多对一?

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

Stack Overflow用户
提问于 2010-04-24 07:37:25
回答 4查看 1.7K关注 0票数 4

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

代码语言:javascript
复制
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)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-24 07:43:32

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

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

票数 6
EN

Stack Overflow用户

发布于 2010-04-24 07:44:55

在其中一个模型中定义关系就足够了。Django将自动在另一个模型中创建一个属性。

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

代码语言:javascript
复制
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自动创建。

票数 4
EN

Stack Overflow用户

发布于 2010-04-24 07:47:13

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2702567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档