Является ли это правильным способом проверки данных в модели?
У меня есть модель, которая представляет обычные данные для входа в систему, и у меня возник вопрос, будет ли правильным, если я проверю, что некоторые данные не верны, я могу вернуть форму снова, но с контекстом, который упоминает об ошибке, и я не знаю, как это сделать. Мне нужны идеи
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].