2013-02-08 42 views

回答

0

这个名字说配发,它是一个可以连接到任何内容类型,即它可以有一个关系到任何模型的外键。一个很好的例子就是投票模型,你可以在多个不同的对象上投票,投票模型中的投票实例只会链接到你投票的模型。

class Article(models.Model): 
    ....... 

class Video(models.Model): 
    ...... 

class Like(models.Model): 
    user = models.ForeignKey(User) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    obj = generic.GenericForeignKey() 

说你有以上这些模型,用户可以喜欢的文章和视频,但你不想要的文章喜欢创造一个模型,因为它在你的数据库,这将创建不必要的表视频分开喜欢可以是痛苦的,特别是如果你有可以被喜欢的模型的分配。为了解决这个问题,您可以创建一个Like模型,它可以在一个模型中存储您的网站的所有喜欢。因此,当用户喜欢文章时,即使没有明确的文章模型的外键,类似的实例也会与用户和文章有关系,这可以通过将类似模型的内容类型设置为内容来完成你喜欢的模型的类型,在这种情况下将是'文章'(不是你可以使用:ContentType.objects.get_for_model(Article)来获取模型的内容类型),然后将文章的id分配给对象ID。

article = Article.objects.get(pk=1) 
article_ct = ContentType.objects.get_for_model(Article) 
user = User.objects.get(username='admin') 
Like.objects.create(user=user, content_type=article_ct, object_id=article.id) 
+0

你能告诉我一些代码吗? – chobo

+0

我编辑了答案 – Charl

相关问题