2010-04-23 162 views
4

我刚刚学习django并遵循教程。我有一个链接和一个书签。与我正在遵循的教程不同,我希望链接仅与一个书签关联,但书签可以有多个链接。这是设置模型的方式吗?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) 

回答

6

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

或者如果您愿意,请在bookmark ForeignKey中提供您自己的related name,如果您不喜欢“link_set”,则为“链接”。

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自动创建的。

1

不,从Bookmark删除links =声明 - 什么为您预定义的书签是一个属性link_set这对他们的书签是这个链接查询(你可以重命名属性,但是真的没有必要)。

1

如果我改变的代码,因为这 例如: 类书签(models.Model): 标题= models.CharField(MAX_LENGTH = 200)

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

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