![](/img/trans.png)
[英]How i can to filter queryset by current user in django rest framework
[英]Filter queryset with one of two criteria that match with the user. Django Rest Framework
我有这个模型:
class MessageViewSet(viewsets.ModelViewSet):
queryset = Message.objects.all()
serializer_class = MessageSerializer
当然,它会返回所有消息。
消息在模型中是这样的:
class Message(models.Model):
created = models.DateTimeField(auto_now_add=True)
type = models.CharField(_('type'), choices=MESSAGE_TYPE, default='Invitation', max_length=100)
content = models.TextField(_('content'), blank=False)
sender = models.ForeignKey(User, related_name='sender_message', verbose_name=_("Sender"), )
recipient = models.ForeignKey(User, related_name='receiver_message', null=True, blank=True,
verbose_name=_("Recipient"))
url_profile_image = models.URLField(_('url_profile_image'), max_length=500, blank=True, default='')
class Meta:
ordering = ('created',)
序列化器是这样的:
class MessageSerializer(serializers.ModelSerializer):
sender = serializers.ReadOnlyField(source='sender.uuid')
recipient = serializers.ReadOnlyField(source='recipient.uuid')
class Meta:
model = Message
fields = ('url', 'id', 'type', 'content', 'sender', 'recipient', 'url_profile_image')
我只希望查询集返回一条消息,如果用户是发件人或收件人。
我正在尝试与此:
filter_backends = filters.DjangoFilterBackend
filter_fields = ('recipient', 'sender')
但这可能不起作用,因为我不知道在哪里比较。
您需要在视图集而不是queryset
字段上定义get_queryset
方法。
然后,您可以访问请求对象以访问当前用户。
def get_queryset(self):
return Message.objects.filter(Q(recipient=self.request.user) | Q(sender=self.request.user))
您可以在文档中找到有关ModelViewSet
另一个示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.