我不知道何时在django.contrib.contenttypes模块中使用类GenericForeignKey
我刚读过上面的链接,但我不知道。
当我使用那个类时?
该课程何时有用?
请给我一些例子〜
答案 0 :(得分: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(文章)来获取模型的内容类型)然后将文章的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)