РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
36 of 818 menu

Метод clean_fields

Метод clean_fields применяется к экземпляру модели и выполняет валидацию каждого поля по отдельности. Он проверяет, что значения полей соответствуют их типам и ограничениям, таким как max_length, null, blank, choices и другие. Метод вызывается автоматически при сохранении модели через full_clean, но может быть вызван и вручную для предварительной проверки. При обнаружении ошибок валидации метод выбрасывает исключение ValidationError.

Синтаксис

model_instance.clean_fields(exclude=None)

Параметры

Метод принимает один необязательный параметр:

exclude - список или кортеж имен полей, которые не нужно проверять. Если параметр передан, то указанные поля пропускаются при валидации.

Пример . Модель

Рассмотрим модель статьи с различными ограничениями:

from django.db import models from django.core.exceptions import ValidationError class Article(models.Model): title = models.CharField(max_length=200, null=False, blank=False) content = models.TextField(null=True, blank=True) rating = models.IntegerField(null=False, default=0) is_published = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title

Пример

Давайте создадим экземпляр модели с невалидными данными и вызовем clean_fields для проверки:

from myapp.models import Article from django.core.exceptions import ValidationError article = Article( title="", # Пустое значение, нарушает null=False и blank=False rating=-5, # Отрицательное значение is_published=True ) try: article.clean_fields() except ValidationError as e: print(e.message_dict)

Результат выполнения кода:

{ "title": ["This field cannot be blank."], "rating": ["Ensure this value is greater than or equal to 0."] }

Пример

Теперь давайте проверим модель с корректными значениями:

from myapp.models import Article article = Article( title="My First Article", content="This is some content.", rating=10, is_published=True ) try: article.clean_fields() print(article.title) except ValidationError as e: print(e.message_dict)

Результат выполнения кода:

"My First Article"

Пример

Используем параметр exclude для пропуска проверки поля rating:

from myapp.models import Article from django.core.exceptions import ValidationError article = Article( title="", rating=-5, is_published=True ) try: article.clean_fields(exclude=["rating"]) except ValidationError as e: print(e.message_dict)

Результат выполнения кода:

{ "title": ["This field cannot be blank."] }

Пример

Рассмотрим более сложный пример с полем choices и проверкой на длину:

from django.db import models from django.core.exceptions import ValidationError class Category(models.Model): STATUS_CHOICES = [ ("draft", "Draft"), ("published", "Published"), ] name = models.CharField(max_length=50, null=False, blank=False) status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="draft") def __str__(self): return self.name category = Category( name="A very long category name that exceeds the max length limit", status="archived" ) try: category.clean_fields() except ValidationError as e: print(e.message_dict)

Результат выполнения кода:

{ "name": ["Ensure this value has at most 50 characters (it has 63)."], "status": ["Value 'archived' is not a valid choice."] }

Смотрите также

  • метод clean,
    который выполняет кросс-полевую валидацию модели
  • метод full_clean,
    который выполняет полную проверку модели
  • метод validate_unique,
    который проверяет уникальность полей модели
  • метод validate_constraints,
    который проверяет ограничения базы данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить