【问题标题】:Null field validation in Django formsDjango 表单中的空字段验证
【发布时间】:2019-03-13 20:23:58
【问题描述】:

我正在尝试过滤一个空字段并在 forms.py 中验证它但我得到以下错误:

无法分配无:“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)  

【问题讨论】:

    标签: forms python-2.7 validation django-forms django-1.9


    【解决方案1】:

    我通过更改模型中的以下字段解决了这个问题:

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

    到:

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

    通过在字段中添加“null=True”。可能是在进行表单验证之前先查看模型字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 2011-02-24
      相关资源
      最近更新 更多