Спасибо за ваше время:
У меня есть модель для получения дополнительной информации о пользователе от OneToOneField, и имя пользователя становится полем Pets.pessoa при его сохранении
в принципе, я бы хотел вызвать ошибку, если поле foreignkey (Pets.pessoa) начинается с 'a' и Pets.tipo == 2
Я получаю объект, созданный, даже когда должна появиться ошибка
Models.py:
class People(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='person')
birthday = models.DateField()
cpf = models.CharField(max_length=11, validators=[RegexValidator(r'^\d{1,10}$')])
def __str__(self):
return '%s' % (self.user)
class Pets(models.Model):
pessoa = models.ForeignKey(People, on_delete=models.CASCADE)
nome = models.CharField(max_length=150)
custo = models.DecimalField(max_digits=7, decimal_places=2)
tipo = models.SmallIntegerField()
def __str__(self):
return '%s - %s' % (self.pessoa, self.nome)
Forms.py:
class PetForm3(forms.ModelForm): #SELECIONAR FORM PELO FORMS.PY
field_choices = [
(1, 'CACHORRO'),
(2, 'GATO'),
(3, 'OUTRO')
]
nome = forms.CharField(max_length=100)
custo = forms.DecimalField(max_digits=7, decimal_places=2)
tipo = forms.ChoiceField(choices=field_choices)
def clean(self, *args, **kwargs):
pessoa_data = self.cleaned_data.get('pessoa')
pessoa_string = slugify(pessoa_data)
tipo_data = self.cleaned_data.get('tipo')
if pessoa_string.startswith('a') and tipo_data==2:
raise ValidationError('User começando com A não pode ter gato')
return super(PetForm3, self).clean(*args, **kwargs)
Views.py:
def create_pet_form(request):
if request.method == 'POST':
form = PetForm3(request.POST)
pet = form.save(commit=False)
pet.pessoa = request.user.person
if form.is_valid():
form.save()
else:
form = PetForm3()
context = {
'form': form
}
return render(request, 'petform3.html', context)