Недавно я написал подробное руководство по переключению с MySQL utf8
на utf8mb4
. Если вы выполните шаги там, все должно работать правильно. Вот прямые ссылки на каждый отдельный шаг процесса:
Надеюсь, это поможет.
Вы можете добавить часть else:
для первого if
.В настоящее время функция возвращает данные
без установки каких-либо ошибок, даже если один из паролей отсутствует - это предполагаемое поведение?
else:
self._errors["password"] = self.error_class(['One or both of the passwords not found'])
если «пароль1» в данных и «пароль2» в данных:
Это гарантирует наличие обоих паролей. Без этой строки вы получите сообщение об ошибке в следующей строке, где вы читаете данные [пароль1]
и данные [пароль2]
, если любой из них отсутствует.
Следующие три строки сравнивают пароли и устанавливают соответствующее сообщение об ошибке - это требуется, не так ли?
Как говорится, делайте вещи настолько простыми, насколько это возможно, больше нет.
Во-первых, вы серьезно жалуетесь на четыре строчки стандартного кода? Если вас это действительно беспокоит, создайте класс PasswordForm
, содержащий эту чистую логику, и при необходимости создайте подклассы для ваших собственных форм.
Во-вторых, вы не должны проверять уникальные ограничения вручную. Как вы говорите, ModelForm сделает это за вас.
Правка после комментария
Этот «странный синтаксис» вызван тем, что проверка совпадения двух полей пароля - это другой поток , чем при обычной схеме. Для начала вы проверяете основной метод clean
, а не специфичный для поля clean_myfield
. Если бы это было последнее, вы просто вызываете исключение, и Django действительно удаляет данные поля.
Так что нет, это не 7 строк в каждой форме - см. Мое примечание о подклассах - и определенно не 7 строк, умноженных на несколько полей, потому что вы не хотите делать это для любой другой тип поля.