Django 返回基于request.user的优化查询集以获取私人评论

Django 返回基于request.user的优化查询集以获取私人评论,django,django-queryset,django-orm,django-3.0,Django,Django Queryset,Django Orm,Django 3.0,我目前有一个评论模型,用户可以“私下”向我们的系统提交评论。这在模型级别设置为布尔值字段,模型的简化版本如下: class Comment(AbstractUUIDModel, AbstractTimestampedModel, VoteModel): class Meta: db_table = 'comments.Comment' indexes = [ models.Index(fields=['uuid', 'id']),

我目前有一个评论模型,用户可以“私下”向我们的系统提交评论。这在模型级别设置为
布尔值
字段,模型的简化版本如下:

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', null=True, 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)
本质上,我遇到的概念性问题是关于我的queryset过滤器逻辑。我希望这样,如果进入系统的
request.user
是评论的
所有者
,那么他们可以看到自己的“私有”评论以及其他非私有评论。否则,他们只能看到
private
为false的注释

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

queryset = obj.comment_set.filter(private=False)
我相信我想得太多了,也许我可以做如下事情:

from django.db.models import Q

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

使用Q对象…

if…子句是否足够?
from django.db.models import Q

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