Валидатор полей не работает, если я использую словарь полей в моей модели django - PullRequest
0 голосов
/ 17 апреля 2020

валидатор

def validate_mandatory_fields(value):
    if value not in ['System', 'Application', 'Info', 'Warning', 'Critical', 'P1', 'P2', 'P3']:
        print("Inside validation error")
        raise ValidationError(
            _('%(value)s is not provided appropriately, '
              'check the values provided for alert_severity, alert_type and alert_priority'),
            params={'value': value},
        )

<# класс моей модели> Предупреждение класса (models.Model):

    ALERT_TYPE_CHOICES = Choices(
        ('APPLICATION', 'Application'),
        ('SYSTEM', 'System'),
    )

    ALERT_SEVERY_CHOICES = Choices(
        ('INFO', 'Info'),
        ('WARNING', 'Warning'),
        ('CRITICAL', 'Critical'),
    )
    ALERT_PRIORITY_CHOICES = Choices(
        ('P1', 'P1'),
        ('P2', 'P2'),
        ('P3', 'P3'),
    )

    alert_name = models.CharField(max_length=20)
    alert_type = models.CharField(max_length=20, choices=ALERT_TYPE_CHOICES)
    alert_source = models.CharField(max_length=20)
    alert_severity = models.CharField(choices=ALERT_SEVERY_CHOICES, max_length=10,
                                      validators=[validate_mandatory_fields])
    alert_priority = models.CharField(choices=ALERT_PRIORITY_CHOICES, max_length=5,
                                      validators=[validate_mandatory_fields])
    timestamp = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.alert_name

# storing data
def write_alert_data(data):
    data = data.decode('utf-8')
    data = eval(data)
    dt = datetime.now()
    utc_time = dt.replace(tzinfo=timezone.utc)
    utc_timestamp = utc_time.timestamp()
    print(data)
    entry = Alert(utc_timestamp, **data)
    entry.save()
    return True

Если я не отправляю никаких данных в одно из полей с «выбором» это не вызывает исключения. Что-то я скучаю, но не уверен, что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...