Валидация erorr повышается для формы, которая проверяет ее значение из другой модели - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь вызвать ошибку проверки поля ввода в forms.py

Мой models.py

class StudBackground(models.Model):
    stud_name=models.CharField(max_length=200)

class Student(models.Model):
    name=models.CharField(max_length=200)

Мой forms.py

class StudentForm(forms.ModelForm):
    name = forms.CharField(max_length=150, label='',widget= forms.TextInput)

    class Meta:
        model = Student
        fields = ['name',]

где я пытался применить чистый метод:

def clean_student(self,*args,**kwargs):
    name=self.cleaned_data.get("name")
    if not studBackground.stud_name in name:
        raise forms.ValidationError ( "It is a not valid student")
    else: return name

Я пытался включить stud_name из модели StudBackground в форму, но она не работает, возникает следующая ошибка, когда я пытаюсь ввести имя студента это не в БД:

Profiles matching query does not exist

однако оно должно возвращаться рядом с полем имени "It is a not valid student"

Как заставить это работать? Что не так с кодом?

1 Ответ

2 голосов
/ 30 марта 2020

Вы можете попробовать так:

def clean_student(self):
    name=self.cleaned_data.get("name")
    if not StudBackground.objects.filter(stud_name=name).exists():
        raise forms.ValidationError("It is a not valid student")
    return name

Я использую функцию filter(...) из набора запросов, чтобы проверить, существует ли имя в StudBackground. Я также запускаю exists(), чтобы проверить, существует ли запись в БД.

Обновление

Я думаю, что ваши отступы не верны для представления , Но вы можете попробовать вот так:

def home(request):
    form = StudentForm(request.POST or None)
    if request.method == "POST":
        if form.is_valid():
            instance = form.save()
            name = instance.name
            class_background=StudBackground.objects.get(stud_name=name)
            context={'back':class_background}
            return render(request, 'class10/background.html', context)
    # Now let us handle if request type is GET or the form is not validated for some reason
    # Sending the form instance to template where student form is rendered. If form is not validated, then form.errors should render the errors.
    # How to show form error: https://docs.djangoproject.com/en/3.0/topics/forms/#rendering-form-error-messages  
    return render(request, 'your_student_form_template.html', context={'form':form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...