我想将一些参数从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()
基本上,我想将基于查询字符串的一些值从 View 传递给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”获取额外的参数。
Reference
关于python - 将额外的参数传递给Django Rest Framework中的Serializer类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22988878/