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)
)