如何通过序列化器创建方法将参数传递给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) 调用它。