2016-02-04 74 views
0

我有这样的模型序列:过滤器嵌套串行Django的REST框架

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 

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

我怎样才能实现这与我目前的意见?现在我的列表在两种情况下都得到了过滤。

编辑:

我使用serializers.SerializerMethodField已经尝试过(),但是我在尝试蹦出validated_data信息时,在我的create()和更新错误()函数。

+0

该代码是正确的,它不清楚'all_for(self.request.user)'可能是它的行为原因。 – Ramast

+0

我只是想过滤器作为嵌套使用时被忽略。 –

+0

也许它会解释更好,如果你提供的模型。您只提供ModelSerializer和两个ViewSet – Ramast

回答

0

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

+0

感谢您的响应djq,响应很好,我唯一需要的是Quote格式,当通过QuoteViewSet调用时被客户端过滤,并且在通过QuoteTemplateViewSet调用时不被客户端过滤。 –

+0

我不认为你的回复很好。基于这个注释,你的'QuoteTemplateViewSet'应该返回一个quryset'self.model.objects.all()'而不是使用用户的过滤器 – djq

+0

我的开发是Sass,所以每个用户都有自己的引用,这就是为什么all_for()。 –