Метод full_clean
Метод full_clean применяется к экземпляру модели
и выполняет полную проверку данных: валидацию каждого поля
через clean_fields, проверку уникальности
через validate_unique и проверку ограничений
через validate_constraints. Метод автоматически
вызывается при сохранении модели через форму, но для
программной валидации его нужно вызывать явно.
Метод принимает два необязательных аргумента:
exclude - список полей, которые нужно исключить
из валидации, и validate_unique - флаг
для отключения проверки уникальности. По умолчанию
оба аргумента имеют значения None и
True соответственно.
Синтаксис
model_instance.full_clean(exclude=None, validate_unique=True)
Пример . Модель
Создадим модель статьи для демонстрации работы метода:
from 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
Пример
Валидируем модель перед сохранением:
from 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}")
Результат выполнения кода:
"Article saved successfully"
Пример
Обработаем ситуацию с невалидными данными:
from 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}")
Результат выполнения кода:
"Error: {'__all__': ['Views cannot be negative']}"
Пример
Исключим поле из валидации с помощью параметра exclude:
from 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")
Результат выполнения кода:
"Article saved with skipped views validation"
Пример
Отключим проверку уникальности с помощью параметра
validate_unique:
from 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")
Результат выполнения кода:
"Article saved without unique validation"
Смотрите также
-
метод
clean,
который используется для кастомной валидации модели -
метод
clean_fields,
который валидирует отдельные поля модели -
метод
validate_unique,
который проверяет уникальность записей -
метод
validate_constraints,
который проверяет ограничения модели