如何使用Django Generic Relation将帖子标记为喜欢

时间:2018-12-18 10:22:59

标签: python django orm generic-relations

我想在我的应用程序中使用GenericRelation来实现“赞”功能。

我已经有了这些模型:

class Activity(models.Model):
    LIKE = 'L'
    ACTIVITY_TYPES = (
        (LIKE, 'Like'),
    )
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    activity_type = models.CharField(max_length=1, choices=ACTIVITY_TYPES)
    date = models.DateTimeField(auto_now_add=True)

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey()

    def __str__(self):
        return str(self.user)


class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = RichTextUploadingField()
    likes = GenericRelation(Activity, related_query_name='posts')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)


    def __str__(self):
        return self.title

我的views.py文件中有这样的一行:

activity = Activity.objects.get(content_type=ContentType.objects.get_for_model(obj), object_id=obj.id, user=request.user)

我的问题是,如何获取该用户已经喜欢此帖子的信息?

1 个答案:

答案 0 :(得分:0)

如果您没有充分的理由使用通用关系,我建议您don't

由于您需要将单个模型Post与带有某些元数据的单个模型Like链接在一起,因此最好使用将两个模型链接在一起的直通模型。看看我关于这个问题的答案here