如何通过序列化器创建方法将参数传递给django中的模型保存方法
How to pass arguments to model save method in django through serializer create method
我正在保存这样的模型
if serializer.is_valid():
message = serializer.save(version_info='55')
我正在传递一个名为 version_info 的参数并在我的序列化程序中
我有以下代码
class MessageSerializer(serilizer.Serializer):
def create(self, validated_data, **kwargs):
message = Message.objects.create(**validated_data)
return message
version_info 参数在 validated_data 字典中
但是我想传递这个 version_info 来保存我的 Message 模型的方法,我已经自定义它来在保存消息时做一些额外的工作
但它给出了这个错误:
TypeError: Message() 得到了一个意外的关键字参数 'version_info'
如何传递 version_info 参数来保存模型的方法?
使用 context
你可以在构造序列化器的时候将其添加到上下文中,所以:
serializer = MessageSerializer(data=data<strong>, context={'version_info': 55}</strong>)
if serializer.is_valid():
message = serializer.save()
并且在序列化程序中,您可以通过以下方式访问上下文:
class MessageSerializer(serilizer.Serializer):
def create(self, validated_data, **kwargs):
version_info = self.context['version_info']
# do something …
message = Message.objects.create(**validated_data)
return message
从 validated_data
中弹出元素
您仍然调用 .save(version_info=55)
的另一个选项是从验证数据中弹出数据:
class MessageSerializer(serilizer.Serializer):
def create(self, validated_data, **kwargs):
version_info = validated_data<b>.pop('version_info', None)</b>
# do something …
message = Message.objects.create(**validated_data)
return message
这将 return None
用于 version_info
如果你没有用 .save(version_info=55)
调用它。
我正在保存这样的模型
if serializer.is_valid():
message = serializer.save(version_info='55')
我正在传递一个名为 version_info 的参数并在我的序列化程序中 我有以下代码
class MessageSerializer(serilizer.Serializer):
def create(self, validated_data, **kwargs):
message = Message.objects.create(**validated_data)
return message
version_info 参数在 validated_data 字典中 但是我想传递这个 version_info 来保存我的 Message 模型的方法,我已经自定义它来在保存消息时做一些额外的工作 但它给出了这个错误: TypeError: Message() 得到了一个意外的关键字参数 'version_info' 如何传递 version_info 参数来保存模型的方法?
使用 context
你可以在构造序列化器的时候将其添加到上下文中,所以:
serializer = MessageSerializer(data=data<strong>, context={'version_info': 55}</strong>)
if serializer.is_valid():
message = serializer.save()
并且在序列化程序中,您可以通过以下方式访问上下文:
class MessageSerializer(serilizer.Serializer):
def create(self, validated_data, **kwargs):
version_info = self.context['version_info']
# do something …
message = Message.objects.create(**validated_data)
return message
从 validated_data
中弹出元素
您仍然调用 .save(version_info=55)
的另一个选项是从验证数据中弹出数据:
class MessageSerializer(serilizer.Serializer):
def create(self, validated_data, **kwargs):
version_info = validated_data<b>.pop('version_info', None)</b>
# do something …
message = Message.objects.create(**validated_data)
return message
这将 return None
用于 version_info
如果你没有用 .save(version_info=55)
调用它。