Как вызвать ошибку в поле, которое принимает request.user в качестве значения - PullRequest
0 голосов
/ 15 апреля 2020

Спасибо за ваше время: у меня есть модель (Домашние животные), у которой есть внешний ключ для других (Люди), и у людей есть 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']
...