Как передать аргументы методу сохранения модели в django через метод serializer create

Я сохраняю такую модель

   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 но я хочу передать эту версию_info в метод сохранения моей модели Message, которую я настроил так, чтобы она выполняла некоторую дополнительную работу при сохранении сообщения но он выдает эту ошибку: TypeError: Message() получил неожиданный аргумент ключевого слова 'version_info' как я могу передать параметр version_info в метод save моей модели?

Использование context

Вы можете добавить его к контексту при построении сериализатора, так:

serializer = MessageSerializer(data=data, context={'version_info': 55})
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.pop('version_info', None)
        # do something …
        message = Message.objects.create(**validated_data)
        return message

это вернет None для version_info, если вы не вызвали его с .save(version_info=55).

Вернуться на верх