我用睡觉框架创建了我的"接口",现在我正在试着为它做过滤.

我的models.py是这样的:

class Airline(models.Model):
    name = models.TextField()

class Workspace(models.Model):
    airline = models.ForeignKey(Airline)
    name = models.CharField(max_length=100)

class Passenger(models.Model):
    workspace = models.ForeignKey(Workspace)
    title = models.CharField(max_length=200)

我希望在我的JSON文件中看到"所有乘客在特定的工作空间"或"所有乘客在特定的航空公司"等.

这是我的serializers.py美元:

class AirlineSerializer(serializers.ModelSerializer):
    class Meta:
        model = Airline


class WorkspaceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Workspace


class PassengerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Passenger

views.py:

class AirlineList(generics.ListCreateAPIView):
    model = Airline
    serializer_class = AirlineSerializer


class AirlineDetail(generics.RetrieveUpdateDestroyAPIView):
    model = Airline
    serializer_class = AirlineSerializer


class WorkspaceList(generics.ListCreateAPIView):
    model = Workspace
    serializer_class = WorkspaceSerializer


class WorkspaceDetail(generics.RetrieveUpdateDestroyAPIView):
    model = Workspace
    serializer_class = WorkspaceSerializer


class PassengerList(generics.ListCreateAPIView):
    model = Passenger
    serializer_class = PassengerSerializer


class PassengerDetail(generics.RetrieveUpdateDestroyAPIView):
    model = Passenger
    serializer_class = PassengerSerializer

我想用Filtering against query parameter,但我真的拿不到...

推荐答案

以下是代码:

class PassengerList(generics.ListCreateAPIView):
    model = Passenger
    serializer_class = PassengerSerializer

    # Show all of the PASSENGERS in particular WORKSPACE
    # or all of the PASSENGERS in particular AIRLINE
    def get_queryset(self):
        queryset = Passenger.objects.all()
        workspace = self.request.query_params.get('workspace')
        airline = self.request.query_params.get('airline')

        if workspace:
            queryset = queryset.filter(workspace_id=workspace)
        elif airline:
            queryset = queryset.filter(workspace__airline_id=airline)

        return queryset

Django相关问答推荐

Django和静态文件

在Django中提交表单后更改模型数据

如何在Django查询集中查询多对多字段内是否存在实例

未强制执行枚举值

如何将我的函数添加到值参数?

在 Django 中按月份和年份对帖子进行分类

root urls.py 是 Django 中的 config/urls.py 吗?

Django ORM 和锁定表

使用 Django 和 South 重命名应用程序

在 Django 的 TextField 中禁用 HTML 转义

直接在模型类上使用 Django 管理器与静态方法

(fields.E300) 字段定义与模型的关系,该模型要么未安装,要么是抽象的

Apache + mod_wsgi 与 nginx + gunicorn

Celery 和 Django 简单示例

在 Django Admin 中过滤多对多框

import_module 的 Django 1.9 ImportError

django 模板列表变量中的最后一个元素

UpdateView 中的success_url,基于传递的值

Django将整数模型字段的范围设置为约束

Python Django 的多线程