Пользовательская валидация полей модели Django

Я использую Django 3.2

У меня есть модель Foo, в которой есть поле roles, которое является CharField, но я хочу добавить пользовательскую валидацию для этого поля, чтобы оно принимало только правильные имена классов/переменных python в строке, разделенной запятыми.

Вот что у меня есть на данный момент:

from django.core.validators import RegexValidator
from django.db import models

# For now, keeping things simple and only accepting alphanum starting with alpha char
CSV_Validator=RegexValidator('^[a-zA-Z][0-9a-zA-Z]*(?:\s*,\s*[a-zA-Z][0-9a-zA-Z]*)*$')


class Foo(models.Model):
    roles = models.CharField(max_length=256, blank=True, null=True, validators=(CSV_Validator,) )

Однако при тестировании успешно передаются следующие строки:

"Foo/?"
"FooBar"

Очевидно, что валидация не применяется. Для второго случая я хочу написать метод clean() для поля (как это делается в Forms), но не могу найти как это сделать в документации - также не уверен, будет ли clean() работать, если доступ к модели через shell (я не хочу переопределять save(), если это возможно - если только это не лучшее место для всего этого).

Вопрос - почему моя пользовательская валидация не работает?

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