Как отфильтровать длину списка свойств `0`? - PullRequest
0 голосов
/ 28 мая 2018

У меня есть 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

1 Ответ

0 голосов
/ 28 мая 2018

Вы можете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...