Django查询模型,如果用户在多个字段中,则返回true
我有一个这样的模型:Django查询模型,如果用户在多个字段中,则返回true,django,django-rest-framework,orm,Django,Django Rest Framework,Orm,我有一个这样的模型: class FeedItem(models.Model) title = models.CharField(max_length=255) source = models.ForeignKey(Source, on_delete=models.CASCADE) read_by = models.ManyToManyField(User, blank=True, related_name='read') deleted_by = models.ManyToManyField(
class FeedItem(models.Model)
title = models.CharField(max_length=255)
source = models.ForeignKey(Source, on_delete=models.CASCADE)
read_by = models.ManyToManyField(User, blank=True, related_name='read')
deleted_by = models.ManyToManyField(User, blank=True, related_name='deleted')
我正在使用rest框架构建一个API。我想查询上面的模型,但不返回read_by和deleted_by中的整个用户列表,而是在这些字段中返回True或False(如果已验证的用户出现在这些字段中)。在FeedItem.objects.filter(…)
中是否有这样做的方法和步骤。下面是我当前的API端点
class Posts(generics.ListAPIView):
queryset = FeedItem.objects.all()
serializer_class = ExampleModelSerializer
filter_backends = [DjangoFilterBackend, OrderingFilter]
filterset_fields = ['title']
ordering_fields = ['title']
您可以使用以下方式进行尝试:
您可以使用以下方式进行尝试:
非常感谢。我只需要将我的序列化程序更改为非modelSerializer,就可以正常工作了。哎呀,我没有注意到它是ListAPIView,不是list view。谢谢!我只需要将我的序列化程序更改为非modelSerializer,然后我就让它工作了。哎呀,我没有注意到它是ListAPIView,而不是list view。
from django.db.models import Case, When, Value, BooleanField
class Posts(generics.ListAPIView):
...
def get_queryset(self, **kwargs):
queryset = super().get_queryset(**kwargs)
return queryset.annotate(
read_by_you=Case(
When(
read_by=self.request.user,
then=Value(True)
),
default=Value(False),
output_field=BooleanField()
)
)