我想从 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')
Views
class OneZeroViewSet(viewsets.ModelViewSet):
serializer_class = OneZeroSerializer(realpart=1)
#serializer_class = OneZeroSerializer
queryset = OneZero.objects.all()
基本上我想将一些基于查询字符串的值从视图传递到序列化器类,然后这些值将分配给字段。
这些字段实际上不包含在模型中动态创建的字段中。
这个问题中的情况相同堆栈溢出 https://stackoverflow.com/questions/18696403/dynamically-modifying-serializer-fields-in-django-rest-framework,但我无法理解答案。
在这种情况下任何人都可以帮助我或建议我更好的选择。
使用“ModelSerializer”构造函数的“context”参数非常简单。
例如:
in view:
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”来获取额外的参数。
参考 http://www.django-rest-framework.org/api-guide/serializers/#including-extra-context
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)