Нормализация строки перед сохранением ее в поле сторонней модели
Я ищу способ изменить строку перед сохранением ее в поле третьей стороны модели.
ВАЖНО: Поле должно быть уникальным, например, имеет unique=True
Допустим, у меня есть функция, которая делает строку строчной и удаляет тире.
def normalize(string:str):
return string.lower().replace('-','')
Я хочу убедиться, что в поле сохраняются только те строки, которые прошли через эту функцию (я не ожидаю использования Model.update()
)
Это решение выглядит хорошо, но имеет большой недостаток:
@receiver(pre_save, sender=TheThirdPartyModel)
def normalize_the_field(sender, instance, **kwargs):
instance.the_field = utils.normalize_the_field(instance.the_field)
таким образом я могу быть уверен, что в БД есть только нормализованные строки, но так как это unique=True
ModelForm
и админ не выдает ошибки валидации при сохранении.
Если в БД уже есть "xxx", а я набираю "XXx" (другой случай) - админка Django не выдает ошибку валидации, а возвращает исключение, которое мне не нужно.
Есть ли способ заставить его работать?
Я не могу переопределить поле динамически, так как миграции будут созданы в стороннем каталоге в виртуальной среде.