Выдает ошибку для поля на основе поля ForeignKey модели DJANGO - PullRequest
0 голосов
/ 20 марта 2020

Спасибо за ваше время:

У меня есть модель для получения дополнительной информации о пользователе от 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)

1 Ответ

0 голосов
/ 20 марта 2020
def create_pet_form(request):
    if request.method == 'POST':
        form = PetForm3(request.POST)
        if form.is_valid():
            pet = form.save(commit=False)
            pet.pessoa = request.user.person
            form.save()
    else:
        form = PetForm3()
    context = {
        'form': form
        }
    return render(request, 'petform3.html', context)

если эта работа

...