Нормализация строки перед сохранением ее в поле сторонней модели

Я ищу способ изменить строку перед сохранением ее в поле третьей стороны модели.

ВАЖНО: Поле должно быть уникальным, например, имеет 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 не выдает ошибку валидации, а возвращает исключение, которое мне не нужно.

Есть ли способ заставить его работать?

Я не могу переопределить поле динамически, так как миграции будут созданы в стороннем каталоге в виртуальной среде.

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