Ситуация
Во время работы с проверкой в Django REST Framework ModelSerializer я заметил, что поля Meta.model всегда проверяются, даже если это не имеет смысла. Возьмем следующий пример для сериализации модели User:
- У меня есть конечная точка, которая создает пользователя. Таким образом, поле
passwordи полеconfirm_password. Если два поля не совпадают, пользователь не может быть создан. Аналогично, если запрошенныйusernameуже существует, пользователь не может быть создан. - Пользовательские POST-коды не соответствуют значениям для каждого из указанных выше полей.
- В сериализаторе была реализована реализация
validate(см. ниже), улавливая не совпадающие поляpasswordиconfirm_password
Реализация validate:
def validate(self, data):
if data['password'] != data.pop('confirm_password'):
raise serializers.ValidationError("Passwords do not match")
return data
Проблема
Даже когда ValidationError поднят на validate, ModelSerializer по-прежнему запрашивает базу данных, чтобы проверить, используется ли username. Это видно в списке ошибок, который возвращается из конечной точки; присутствуют как модельные, так и непарные ошибки.
Следовательно, я хотел бы знать, как предотвратить проверку модели до тех пор, пока не завершится проверка не-поля, сохранив вызов в моей базе данных.
Попытка решения
Я пытаюсь пройти через источник DRF, чтобы выяснить, где это происходит, но мне не удалось найти то, что мне нужно переопределить, чтобы заставить это работать.