将额外参数传递给 Django Rest Framework 中的 Serializer 类

2024-05-05

我想从 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(使用前将#替换为@)

将额外参数传递给 Django Rest Framework 中的 Serializer 类 的相关文章

随机推荐