Метод full_clean

Метод full_clean применяется к экземпляру модели и выполняет полную проверку данных: валидацию каждого поля через clean_fields, проверку уникальности через validate_unique и проверку ограничений через validate_constraints. Метод автоматически вызывается при сохранении модели через форму, но для программной валидации его нужно вызывать явно.

Метод принимает два необязательных аргумента: exclude - список полей, которые нужно исключить из валидации, и validate_unique - флаг для отключения проверки уникальности. По умолчанию оба аргумента имеют значения None и True соответственно.

Синтаксис

pythonmodel_instance.full_clean(exclude=None, validate_unique=True)

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

Создадим модель статьи для демонстрации работы метода:

pythonfrom django.db import models
from django.core.exceptions import ValidationError

class Article(models.Model):
  title = models.CharField(max_length=100)
  content = models.TextField()
  views = models.IntegerField(default=0)
  is_published = models.BooleanField(default=False)
  created_at = models.DateTimeField(auto_now_add=True)

  def clean(self):
    if self.views < 0:
      raise ValidationError(
        "Views cannot be negative"
      )

  def __str__(self):
    return self.title

Пример

Валидируем модель перед сохранением:

pythonfrom myapp.models import Article

article = Article(
  title="First article",
  content="Some content",
  views=10
)

try:
  article.full_clean()
  article.save()
  print("Article saved successfully")
except ValidationError as e:
  print(f"Validation error: {e}")

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

python"Article saved successfully"

Пример

Обработаем ситуацию с невалидными данными:

pythonfrom myapp.models import Article
from django.core.exceptions import ValidationError

article = Article(
  title="Invalid article",
  content="Content",
  views=-5
)

try:
  article.full_clean()
except ValidationError as e:
  print(f"Error: {e.message_dict}")

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

python"Error: {'__all__': ['Views cannot be negative']}"

Пример

Исключим поле из валидации с помощью параметра exclude:

pythonfrom myapp.models import Article

article = Article(
  title="Test article",
  content="Test content",
  views=100
)

article.full_clean(exclude=['views'])
article.save()
print("Article saved with skipped views validation")

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

python"Article saved with skipped views validation"

Пример

Отключим проверку уникальности с помощью параметра validate_unique:

pythonfrom myapp.models import Article

article = Article(
  title="Duplicate title",
  content="Content",
  views=50
)

article.full_clean(validate_unique=False)
article.save()
print("Article saved without unique validation")

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

python"Article saved without unique validation"

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

  • метод clean,
    который используется для кастомной валидации модели
  • метод clean_fields,
    который валидирует отдельные поля модели
  • метод validate_unique,
    который проверяет уникальность записей
  • метод validate_constraints,
    который проверяет ограничения модели