Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django查询模型,如果用户在多个字段中,则返回true_Django_Django Rest Framework_Orm - Fatal编程技术网

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