将上下文传递给 Django Rest Framework 中的 ModelSerializer 字段
Pass context to ModelSerializer field in Django Rest Framework
我正在尝试通过 context
将变量从我的 view
传递到序列化程序。序列化程序应该能够获取上下文变量并在包含嵌套序列化程序的字段中使用它。
由于嵌套的序列化器字段不能是read_only
,我不能使用serializerMethodField
。
这是我将上下文传递给序列化程序的方式:
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
。我该怎么做?
您可以在初始化时更新 child 的上下文:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['child'].context.update(self.context)
或者您可以在 to_representation
中捕获它,例如:
self.parent.context["asTime"]
我正在尝试通过 context
将变量从我的 view
传递到序列化程序。序列化程序应该能够获取上下文变量并在包含嵌套序列化程序的字段中使用它。
由于嵌套的序列化器字段不能是read_only
,我不能使用serializerMethodField
。
这是我将上下文传递给序列化程序的方式:
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
。我该怎么做?
您可以在初始化时更新 child 的上下文:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['child'].context.update(self.context)
或者您可以在 to_representation
中捕获它,例如:
self.parent.context["asTime"]