Как передать аргументы методу сохранения модели в 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)
.