【发布时间】:2015-01-27 05:02:11
【问题描述】:
在 Django Rest Framework 中,当一个序列化器嵌套在另一个序列化器中时,如何过滤它?
我的过滤器被强加在 DRF 视图集中,但是当您从另一个序列化器内部调用一个序列化器时,嵌套序列化器的视图集永远不会被调用,因此嵌套结果显示为未经过滤。
我尝试在原始视图集上添加过滤器,但它似乎没有过滤嵌套结果,因为嵌套结果被称为单独的预提取查询。 (嵌套序列化器是反向查找,你看。)
是否可以在嵌套序列化程序本身中添加 get_queryset() 覆盖(将其移出视图集),以在此处添加过滤器?我也尝试过,但没有成功。
这是我尝试过的,但它似乎没有被调用:
class QuestionnaireSerializer(serializers.ModelSerializer):
edition = EditionSerializer(read_only=True)
company = serializers.StringRelatedField(read_only=True)
class Meta:
model = Questionnaire
def get_queryset(self):
query = super(QuestionnaireSerializer, self).get_queryset(instance)
if not self.request.user.is_staff:
query = query.filter(user=self.request.user, edition__hide=False)
return query
【问题讨论】:
-
get_queryset是ModelViewSet上的一个类,而不是序列化器上的一个类,这就是它没有被调用的原因
标签: django django-rest-framework