根据request.user返回优化的查询集以获取私人评论

问题描述

我目前有一个评论模型,用户可以通过它“私下”向我们的系统提交评论。在模型级别上,将其设置为Boolean字段,该模型的缩写版本如下:

class Comment(AbstractUUIDModel,AbstractTimestampedModel,VoteModel):

    class Meta:
        db_table = 'comments.Comment'
        indexes = [
            models.Index(fields=['uuid','id']),]
        verbose_name = 'Comment'
        verbose_name_plural = 'Comments'
        ordering = ['-created_datetime']

    id = models.AutoField(_('ID'),primary_key=True)

    parent = models.ForeignKey('comments.Comment',null=True,blank=True,on_delete=models.CASCADE)

    owner = models.ForeignKey('authentication.User',on_delete=models.CASCADE)

    text = models.TextField(_('Description'),default='')

    private = models.BooleanField(_('Is Private?'),default=False)

    def __str__(self):
        return self.text

    def save(self,*args,**kwargs):
        super(Comment,self).save(*args,**kwargs)

本质上,我遇到的概念性问题与查询集过滤器逻辑有关。我希望这样,如果进入系统的request.user是注释的owner,那么他们可以看到自己的“私有”注释以及其他非私有注释。否则,他们只能看到private为假的注释。

因此,我需要以某种方式合并以下两个查询集以在DRF中进行序列化:

queryset = obj.comment_set.filter(private=False)
queryset = obj.comment_set.filter(owner=self.context.get('request').user)

我相信我对此想法过分思考,也许我可以做些类似的事情:

from django.db.models import Q

queryset = obj.comment_set.filter(
    Q(owner=self.context.get('request').user) | Q(private=False)
)

使用Q对象...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)