过滤嵌套的serializer django rest框架

时间:2016-02-04 23:20:23

标签: python django django-rest-framework models

我有这个型号序列化器:

class QuoteTemplateSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(read_only=True)
    quote = QuoteSerializer()
    language_list = serializers.SerializerMethodField()

    class Meta:
        model = QuoteTemplate
        fields = ('id', 'user', 'quote', 'language_list')

这个观点:

class QuoteViewSet(ModelViewSet):
    model = q.Quote
    serializer_class = serializers.QuoteSerializer
    permission_classes = [
         GallantViewSetPermissions
     ]

    def get_queryset(self):
        return self.model.objects.filter(client__isnull=False)



class QuoteTemplateViewSet(ModelViewSet):
    model = q.QuoteTemplate
    serializer_class = serializers.QuoteTemplateSerializer
    permission_classes = [
         GallantViewSetPermissions
     ]

    def get_queryset(self):
        return self.model.objects

我想列出Quote Model和QuoteTemplate模型。但是,当列出Quote模型时,我想跳过那些没有客户端的记录,当列出QuoteTemplate模型时,我不想过滤。

如何使用我目前的观点实现这一目标?现在我的列表在这两种情况下都被过滤了。

修改

我已经尝试过使用serializers.SerializerMethodField()但是当我尝试从validated_data中弹出信息时,我的create()和update()函数出错了。

1 个答案:

答案 0 :(得分:0)

您应该检查您的视图集返回的内容。您确定q.Quote.objects.all_for(self.request.user).filter(client__isnull=False)q.QuoteTemplate.objects.all_for(self.request.user)正在返回正确的查询集吗?序列化程序中没有逻辑,只是序列化查询集中的值。