Django модели: используйте save (), чтобы показать, какое поле не сработало вместо 500 - PullRequest
0 голосов
/ 18 февраля 2020

Мой код

myapp / validators.py

from django.conf import settings

def UIDValdator(obj_uid):
    if re.match(settings.UID_REGEX_PATTERN, obj_uid):
       return True
    raise ValidationError(f"The uid must follow the pattern: {settings.UID_REGEX_PATTERN}")

myapp / models.py

from django.conf import settings
from .validators import UIDValdator

class MyObject(models.Model):
   uid = models.CharField(validators=[UIDValidator],....)
   ...
   ...
   def save(self, *args, **kwargs):
       if UIDValidator(self.uid):
            super(MyObject, self).save(*args, **kwargs)

Мой вопрос

Я могу sh Я мог бы использовать UIDValidator только один раз, теперь я использую его дважды, потому что если я пытаюсь создать свой объект, используя ORM не будет поднимать исключение, и если я удалю валидацию из моего поля, будет выброшено 500 вместо подчеркивания поля сообщением об ошибке. Обнаружил это, когда начал запускать тесты.

Что мне нужно

Я хочу использовать только метод save () и проверить с ним также форму администратора

class MyObject(models.Model):
   uid = models.CharField(....)# exclude the validator here and use only the save() method
   ...
   ...
   def save(self, *args, **kwargs):
       if UIDValidator(self.uid):
            super(MyObject, self).save(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...