过滤Django序列化器数据

时间:2018-09-26 12:17:52

标签: django django-models django-rest-framework django-serializer

很多时候,我们根据Django(1.11.10)中的模型中定义的关系通过序列化程序目录访问数据。我如何设置类似仅提取is_active = 1的过滤器。

class DaasJobsSerializer(serializers.ModelSerializer):
    class Meta:
        model = DaasJobs
        fields = '__all__'

class DaasScheduleSerializer(serializers.ModelSerializer):
    jobs = DaasJobsSerializer(read_only=True,many=True)

    class Meta:
        model = DaasSchedule
        fields = '__all__'

这里,我只想设置一个过滤器,以仅提取该行中db字段为is_active = 1的作业,例如 DaasJobsSerializer(read_only = True,many = True,filter = {“ is_active”:1})怎么做这样的事情?

当前,它在不检查is_active的情况下为我提供了所有数据, 而且我不想为此创建serializerMethodField。因为所有先前编写的方法..我只是稍后在db表中设置is_active字段。

1 个答案:

答案 0 :(得分:0)

如果您想通过序列化程序来执行此操作,则可以尝试覆盖tbl_name并将其作为自定义list_serializer_class传递。

column_name

在序列化器中:

ListSerializer

当然,这是一个特定的用例,您可以将ListSerializer的版本更通用:

class IsActiveListSerializer(serializers.ListSerializer):

    def to_representation(self, data):
        data = data.filter(is_active=1)
        return super().to_representation(data)

然后您可以将其子类化,以制作其他特定的ListSerializer,例如:

class DaasJobsSerializer(serializers.ModelSerializer):
    class Meta:
        model = DaasJobs
        fields = '__all__'
        list_serializer_class = IsActiveListSerializer  # import it here

还有许多其他...