Что делают чистые функции в 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

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