最佳答案
在 Django RestFramework 中,当一个序列化程序嵌套在另一个序列化程序中时,如何筛选它?
我的过滤器强加在 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