Проверка пустого поля в формах Джанго - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь отфильтровать пустое поле и проверить его в forms.py Но я получаю ошибку ниже:

Невозможно присвоить None: «TeacherAttendance.teacher» не допускает нулевые значения.

Но я делаю проверку в форме, как показано ниже для области учителя.Должно появиться предупреждение «Пожалуйста, выберите учителя».Но это не так.Он должен подтвердить нулевое значение для учителя и вернуться к форме с предупреждением о подтверждении, если я не выбрал учителя из поля учителя.

class TeacherAttendanceForm(forms.ModelForm):

class Meta:
    model = TeacherAttendance
    fields = ('time', 'attendance', 'teacher','dailynote','writer',)
    exclude = ['uuid', 'notedate',]
    widgets = {
        'attendance': forms.RadioSelect(renderer=HorizontalRadioRenderer),
        'dailynote': forms.Textarea(attrs={'rows': 10}),
        'writer': forms.Textarea(attrs={'rows': 1}),
        'uuid': forms.HiddenInput(),
        'semester': forms.HiddenInput(),
    }

def clean(self):
    if str(self.cleaned_data['time']) == "-----------":
        raise forms.ValidationError('Please choose time.')
    if self.cleaned_data['dailynote'] == "":
        raise forms.ValidationError('Please enter note.')
    if not self.cleaned_data['teacher']:
        raise forms.ValidationError('Please choose teacher .')

Моя модель ниже, а поле учителя - это раскрывающееся поле, в котором показаны всеучитель.

class TeacherAttendance(BaseModel):
teacher = models.ForeignKey(Staff, blank=True, verbose_name=_("Choose Teacher"))
attendance = models.CharField(choices=TEACHER_ATTENDANCE, default="YOK", max_length=20, verbose_name=_("Attendance"))
time = models.CharField(choices=TIME, default="-------------", max_length=20, verbose_name=_("Time"))
dailynote = models.TextField(null=True, blank=True, verbose_name=_("Add Note"))
notedate = models.DateField(auto_now_add=True, db_index=True, verbose_name=_("Date"))
writer = models.TextField(null=True, blank=True, verbose_name=_("Writer"))

class Meta:
    unique_together = ("teacher", "attendance", "notedate")
    index_together = [["teacher", "notedate", ], ]

def __unicode__(self):
    return "%s / %s / %d " % (self.teacher, self.notedate, self.attendance)  

1 Ответ

0 голосов
/ 09 октября 2018

Я решил вопрос, изменив приведенное ниже поле в модели:

teacher = models.ForeignKey (Staff, blank = True, verbose_name = _ ("Choose Teacher"))

до:

teacher = models.ForeignKey (Staff, пробел = True, null = True, verbose_name = _ («Выбрать учителя»))

добавив "null = True" в поле.Вероятно, он сначала просматривал поле модели, а затем проверял форму.

...