0

我不知道何时在 django.contrib.contenttypes 模块中使用类 GenericForeignKey

https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#django.contrib.contenttypes.generic.GenericForeignKey

我刚刚阅读了上面的链接,但我不知道。

当我使用那个类?

那门课什么时候有用?

请举几个例子~

4

1 回答 1

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 模型,它可以将您网站的所有喜欢存储在一个模型中。因此,当用户喜欢一篇文章时,即使 Article 模型没有明确的外键,like 实例也会与用户和文章有关系,这可以通过将 like 模型的内容类型设置为内容来完成您喜欢的模型的类型,在这种情况下为“文章”(不是您可以使用此:ContentType.objects。

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)
于 2013-02-08T07:12:03.740 回答