我想将一些参数从Viewset传递给DRF Serializer类,因此我已经尝试过:
class OneZeroSerializer(rest_serializer.ModelSerializer): def __init__(self, *args, **kwargs): print args # show values that passed location = rest_serializer.SerializerMethodField('get_alternate_name') def get_alternate_name(self, obj): return '' class Meta: model = OneZero fields = ('id', 'location')
观看次数
class OneZeroViewSet(viewsets.ModelViewSet): serializer_class = OneZeroSerializer(realpart=1) #serializer_class = OneZeroSerializer queryset = OneZero.objects.all()
基本上,我想将基于查询字符串的一些值从视图传递给Serializer类,然后将它们分配给字段。
这些字段实际上不包含在“模型”中,而是动态创建的字段。
这个问题stackoverflow中的情况相同,但我无法理解答案。
在这种情况下,任何人都可以帮助我或为我提供更好的选择。
对于“ ModelSerializer”构造函数,使用“上下文” arg非常简单。
例如:
鉴于:
my_objects = MyModelSerializer( input_collection, many=True, context={'user_id': request.user.id} ).data
在序列化器中:
class MyModelSerializer(serializers.ModelSerializer): ... is_my_object = serializers.SerializerMethodField('_is_my_find') ... def _is_my_find(self, obj): user_id = self.context.get("user_id") if user_id: return user_id in obj.my_objects.values_list("user_id", flat=True) return False ...
因此您可以使用“ self.context”获取额外的参数。