filter_queryset 带有布尔字段
filter_queryset with boolean field
我有以下看法:
class MessagesViewSet(ModelViewSet):
"""
A simple ViewSet for viewing and editing the messages
associated with the user.
"""
authentication_classes = [TokenAuthentication, ]
permission_classes = [IsAuthenticated]
serializer_class = MessageSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = [MessageFields.MARK_READ]
def get_user(self):
user = self.request.user
return user
def get_queryset(self):
return Message.objects.filter(sent_to=self.get_user())
def perform_create(self, serializer):
serializer.save(sender=self.get_user())
@action(detail=True, )
def unread_messages(self, request, pk):
"""
Return all of the user's unread messages.
"""
data = self.filter_queryset(self.get_queryset())
serialized_data = MessageSerializer(data, many=True)
return Response(serialized_data.data, status=HTTP_200_OK)
in unread_messages
我只想 return 具有 mark_read = True
的对象(这是一个布尔字段)。
现在它 return 是所有对象,因为在方法中没有关于是真还是假的限制。
那么如何在方法中设置某种标志?
你用 mark_read
过滤它是(可能)False
:
class MessagesViewSet(ModelViewSet):
"""
A simple ViewSet for viewing and editing the messages
associated with the user.
"""
authentication_classes = [TokenAuthentication, ]
permission_classes = [IsAuthenticated]
serializer_class = MessageSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = [MessageFields.MARK_READ]
def get_user(self):
user = self.request.user
return user
def get_queryset(self):
return Message.objects.filter(sent_to=self.get_user()<b>, mark_read=False</b>)
def perform_create(self, serializer):
serializer.save(sender=self.get_user())
@action(detail=True, )
def unread_messages(self, request, pk):
"""
Return all of the user's unread messages.
"""
data = self.filter_queryset(self.get_queryset())
serialized_data = MessageSerializer(data, many=True)
return Response(serialized_data.data, status=HTTP_200_OK)
或者您可以仅在 unread_messages
中过滤这些:
class MessagesViewSet(ModelViewSet):
"""
A simple ViewSet for viewing and editing the messages
associated with the user.
"""
authentication_classes = [TokenAuthentication, ]
permission_classes = [IsAuthenticated]
serializer_class = MessageSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = [MessageFields.MARK_READ]
def get_user(self):
user = self.request.user
return user
def get_queryset(self):
return Message.objects.filter(sent_to=self.get_user())
def perform_create(self, serializer):
serializer.save(sender=self.get_user())
@action(detail=True, )
def unread_messages(self, request, pk):
"""
Return all of the user's unread messages.
"""
data = self.filter_queryset(self.get_queryset())<b>.filter(mark_read=False)</b>
serialized_data = MessageSerializer(data, many=True)
return Response(serialized_data.data, status=HTTP_200_OK)
我有以下看法:
class MessagesViewSet(ModelViewSet):
"""
A simple ViewSet for viewing and editing the messages
associated with the user.
"""
authentication_classes = [TokenAuthentication, ]
permission_classes = [IsAuthenticated]
serializer_class = MessageSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = [MessageFields.MARK_READ]
def get_user(self):
user = self.request.user
return user
def get_queryset(self):
return Message.objects.filter(sent_to=self.get_user())
def perform_create(self, serializer):
serializer.save(sender=self.get_user())
@action(detail=True, )
def unread_messages(self, request, pk):
"""
Return all of the user's unread messages.
"""
data = self.filter_queryset(self.get_queryset())
serialized_data = MessageSerializer(data, many=True)
return Response(serialized_data.data, status=HTTP_200_OK)
in unread_messages
我只想 return 具有 mark_read = True
的对象(这是一个布尔字段)。
现在它 return 是所有对象,因为在方法中没有关于是真还是假的限制。
那么如何在方法中设置某种标志?
你用 mark_read
过滤它是(可能)False
:
class MessagesViewSet(ModelViewSet):
"""
A simple ViewSet for viewing and editing the messages
associated with the user.
"""
authentication_classes = [TokenAuthentication, ]
permission_classes = [IsAuthenticated]
serializer_class = MessageSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = [MessageFields.MARK_READ]
def get_user(self):
user = self.request.user
return user
def get_queryset(self):
return Message.objects.filter(sent_to=self.get_user()<b>, mark_read=False</b>)
def perform_create(self, serializer):
serializer.save(sender=self.get_user())
@action(detail=True, )
def unread_messages(self, request, pk):
"""
Return all of the user's unread messages.
"""
data = self.filter_queryset(self.get_queryset())
serialized_data = MessageSerializer(data, many=True)
return Response(serialized_data.data, status=HTTP_200_OK)
或者您可以仅在 unread_messages
中过滤这些:
class MessagesViewSet(ModelViewSet):
"""
A simple ViewSet for viewing and editing the messages
associated with the user.
"""
authentication_classes = [TokenAuthentication, ]
permission_classes = [IsAuthenticated]
serializer_class = MessageSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = [MessageFields.MARK_READ]
def get_user(self):
user = self.request.user
return user
def get_queryset(self):
return Message.objects.filter(sent_to=self.get_user())
def perform_create(self, serializer):
serializer.save(sender=self.get_user())
@action(detail=True, )
def unread_messages(self, request, pk):
"""
Return all of the user's unread messages.
"""
data = self.filter_queryset(self.get_queryset())<b>.filter(mark_read=False)</b>
serialized_data = MessageSerializer(data, many=True)
return Response(serialized_data.data, status=HTTP_200_OK)