Является ли это правильным способом проверки данных в модели?

У меня есть модель, которая представляет обычные данные для входа в систему, и у меня возник вопрос, будет ли правильным, если я проверю, что некоторые данные не верны, я могу вернуть форму снова, но с контекстом, который упоминает об ошибке, и я не знаю, как это сделать. Мне нужны идеи

class User(models.Model):
    nombre = models.CharField(max_length=60,unique=True)
    edad = models.IntegerField()
    contraseña = models.CharField(max_length=60)
    gmail  = models.EmailField(max_length=60,unique=True)
    def __str__(self):
        return self.nombre
    def save(self, *args, **kwargs):
        if User.objects.filter(nombre=self.nombre):
            raise ValueError("Ya existe el usuario")
        elif self.edad >0 and self.edad <99:
            super().save(*args, **kwargs)
        else:
            

Где else: - это место, куда шаблон должен возвращаться снова, это было бы правильно или, может быть, я должен реализовать это по-другому

Нет, это неправильно, так как форма при валидации не будет вызывать .save(…) [Django-doc] и поэтому проверки в методе .save(…) будут не выполняться.

Но, кроме того, в этом нет необходимости. Поле unique=True проверяется самим полем ModelForm. Вы также можете добавить диапазон к IntegerField с помощью:

from django.core.validators import MaxValueValidator, MinValueValidator


class User(models.Model):
    nombre = models.CharField(max_length=60, unique=True)
    edad = models.IntegerField(
        validators=[MinValueValidator(1), MaxValueValidator(98)]
    )
    contraseña = models.CharField(max_length=60)
    gmail = models.EmailField(max_length=60, unique=True)

    def __str__(self):
        return self.nombre

    # no override of .save()

Таким образом, мы добавили validators=… [Django-doc] в поле edad, и они будут выполняться ModelForm, полученными из User модели. For validators we use the MinValueValidator [Django-doc] and MaxValueValidator [Django-doc].

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