将上下文传递到Django Rest Framework中的ModelSerializer字段

vq8itlhq  于 2023-03-24  发布在  Go
关注(0)|答案(1)|浏览(69)

我试图通过context将变量从我的view传递给序列化器。序列化器应该能够获取上下文变量并在包含嵌套序列化器的字段中使用它。
因为嵌套的序列化器字段不能是read_only,所以我不能使用serializerMethodField

我是这样把context传递给序列化器的:

class MyListCreateAPIView(generics.ListCreateAPIView):
    
    # [...]

    def get_serializer_context(self):
        return {
            'request': self.request,
            'format': self.format_kwarg,
            'view': self,
            'asTime': '2021-02-04 16:40:00',   # <-- This is my context variable
        }

这是我的序列化器:

class MySerializer(serialisers.ModelSerializer):
    child = MyChildSerializer(read_only=False, asTime= ??) # <-- here I want to pass the context variable

    class Meta:
         model = MyModel
         fields = '__all__'

我知道我可以用self.context.get('asTime')访问上下文变量,但我不能在MySerializer属性(子)中访问self。我该怎么做?

wbrvyc0a

wbrvyc0a1#

您可以在init上更新子进程的上下文:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)        
    self.fields['child'].context.update(self.context)

或者你可以在to_representation中捕获它:

self.parent.context["asTime"]

相关问题