Пользовательская валидация полей модели 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()
, если это возможно - если только это не лучшее место для всего этого).
Вопрос - почему моя пользовательская валидация не работает?