Что делают чистые функции в model django? НЕ В ФОРМАХ
Я читал ЭТО-РЕШЕНИЕ и мне интересно, какую дозу выполняет "функция очистки"?
чисто ли там, куда мы должны поместить наши чеки?
<время работы/>затем я нашел эту картинку : введите описание изображения здесь
итак, у нас есть куча функций очистки, я просто хочу знать, что они делают. и правильно ли использовать "clean", если мы хотим добавить фильтр, который гарантирует, что у нас не будет более x объектов из одной модели (таблицы)?
<время работы/>Я думаю, что использование "def save() " кажется более подходящим для решения такого рода проверки, но я не уверен.
Метод clean
в модели Django используется для выполнения проверок (валидаций) по всей модели.
В моделях баз данных Django есть еще один метод, называемый clean_fields
, который запускает метод очистки для каждого поля и выдает ошибку проверки на основе поля, если есть какая-либо ошибка. Таким образом, ошибки, вызванные методом clean_fields
, будут основаны на полях, например:
{
"name": "Invalid name format",
...
}
Но метод clean
вызывает ошибки, не связанные с полями, это означает, что ошибки не связаны ни с какими полями. Возникающие ошибки могут быть такими:
{
"non_field_errors: [
"Invalid name format"
]
}
(Примечание: Форматы ошибок здесь могут отличаться.)
Имеет смысл использовать функцию очистки, когда мы хотим выполнить некоторые проверки в полях модели.
Но поскольку вы упомянули свой вариант использования ограничения количества объектов для конкретной модели, хорошим выбором должно быть использование метода save
в модели.
Пример:
def save(self, *args, **kwargs):
if not self.pk and MyModel.objects.count() >= 10:
raise ValidationError("Cannot create more than 10 objects.")
super().save(*args, **kwargs)
Вы также можете сделать то же самое, используя метод clean
, но тогда вам нужно убедиться, что метод clean
выполняется перед каждым сохранением, и это не происходит автоматически, тогда вам нужно будет запустить его вручную, возможно, с помощью вызываю full_clean
перед каждым сохранением. Эти накладные расходы могут быть сэкономлены при использовании метода save
.
что ж, документы всегда самые лучшие.
Я просто не смог его найти.
https://docs.djangoproject.com/en/5.1/ref/models/instances/#validating-objects