python - 如何过滤列表属性的长度是 `0` ?

标签 python django django-rest-framework

我有一个 ListAPIView,这是访问 url localhost:8000/api/physicalserver_task/list 的结果:

{
    "count": 1,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 16,
            "physicalservers": [],
            ...

代码如下:

class PhysicalServerTaskListForHomeWorkPanelAPIView(ListAPIView):
    serializer_class = PhysicalServerTaskListForHomeWorkPanelSerializer
    permission_classes = [IsAdminUser]
    pagination_class = CommonPagination

    def get_queryset(self):
        filters = {'{}__contains'.format(key): value
               for key, value in query_params.items()}
        return PhysicalServerTask.objects.filter(**filters)

我有一个要求,就是过滤physicalservers的长度是0

你知道如果我们只过滤id,我们可以使用

localhost:8000/api/physicalserver_task/list/?id=16

但是,如果我想过滤 physicalservers 的计数是 0 呢?


EDIT-1

我的Serialiazer代码如下:

class PhysicalServerTaskListForHomeWorkPanelSerializer(ModelSerializer):

    physicalservers = PhysicalServerTaskSerializer(many=True, read_only=True)

    physicalserver_count = serializers.IntegerField(write_only=True, allow_null=True)

    class Meta:
        model = PhysicalServerTask
        fields = "__all__"
        depth = 1

最佳答案

您可以为此使用 phisicalservers__isnull 查找:

def get_queryset(self):
    filters = {'{}__contains'.format(key): value
           for key, value in query_params.items()}
    if query_params.get('serverscount') == 0:
        filters.update({'phisicalservers__isnull': True})
    return PhysicalServerTask.objects.filter(**filters)

关于python - 如何过滤列表属性的长度是 `0` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50560673/

相关文章:

python - C++ 嵌入式解释器和对象

python - 索引错误 : list index out of range Python 2. 7.x

python - 在 Django 模型类中使用 self

Python运行系统命令然后退出...不会退出

python - 如何通过 Django 中的 'status' 变量对对象进行排序

python - 加密数据库字段的好方法?

django - 我如何为 View 集使用限制偏移分页

Django REST 框架 - 根据 http 方法不同的同一 url View

django - 使用 Django Rest 框架中定义的 mixins 类

python - 编译 cython Hello World 示例 : don't know how to compile C/C++ code on platform