Спасибо за ваше время: у меня есть модель (Домашние животные), у которой есть внешний ключ для других (Люди), и у людей есть OnetoOne (Пользователь).
Я пытаюсь вызвать ошибки на ModelForm делает чистый метод на Models.py. хотя поле внешнего ключа Pets установлено как request.user.person (обратное поле OneToOne для пользователя с людьми). Когда я пытаюсь сохранить форму, я получаю сообщение об ошибке:
"Домашние животные не имеют Пессоа" и указывают на if form.is_valid():
в представлениях
Я пытался с методом clean_fields:
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, related_name='peop')
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)
def clean_fields(self, exclude=None):
super().clean_fields(exclude=exclude)
slug = slugify(self.pessoa)
if slug.startswith('a') and self.tipo == 2:
if exclude and 'pessoa' in exclude:
raise ValidationError('pessoas com a nao podem ter gatos')
views.py:
def create_pet_form3(request):
if request.method == 'POST':
form = PetForm5(request.POST)
if form.is_valid():
pet = form.save(commit=False)
pet.pessoa = request.user.person
pet.save()
else:
raise ValidationError('corriga os erros')
else:
form = PetForm5()
context = {
'form': form
}
return render(request, 'petform2.html', context)
forms.py:
class PetForm5(forms.ModelForm):
class Meta:
prefix = 'pet'
model = Pets
fields = ['nome', 'custo', 'tipo']
exclude = ['pessoa']