过滤器嵌套串行Django的REST框架
我有这样的模型序列:过滤器嵌套串行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()和更新错误()函数。
你应该检查你的视图集正在返回什么。你确定q.Quote.objects.all_for(self.request.user).filter(client__isnull=False)
和q.QuoteTemplate.objects.all_for(self.request.user)
正在返回正确的查询集吗?序列化程序中没有逻辑,它只是序列化查询集中的值。
感谢您的响应djq,响应很好,我唯一需要的是Quote格式,当通过QuoteViewSet调用时被客户端过滤,并且在通过QuoteTemplateViewSet调用时不被客户端过滤。 –
我不认为你的回复很好。基于这个注释,你的'QuoteTemplateViewSet'应该返回一个quryset'self.model.objects.all()'而不是使用用户的过滤器 – djq
我的开发是Sass,所以每个用户都有自己的引用,这就是为什么all_for()。 –
该代码是正确的,它不清楚'all_for(self.request.user)'可能是它的行为原因。 – Ramast
我只是想过滤器作为嵌套使用时被忽略。 –
也许它会解释更好,如果你提供的模型。您只提供ModelSerializer和两个ViewSet – Ramast