问题描述
我目前有一个评论模型,用户可以通过它“私下”向我们的系统提交评论。在模型级别上,将其设置为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 (将#修改为@)