一尘不染

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

django

我想将一些参数从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中的情况相同,但我无法理解答案。

在这种情况下,任何人都可以帮助我或为我提供更好的选择。


阅读 788

收藏
2020-04-02

共1个答案

一尘不染

对于“ 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”获取额外的参数。

2020-04-02