我正在使用formset将数据输入数据库,但由于某些原因,每当我在终端中进行测试并调用.is_valid()时,它都不会验证。无论我做什么尝试,它都会返回false。下面是my views.py和forms.py中的代码。任何帮助都将不胜感激!
# Advanced Subjects (Advanced Biology)
def form_5_entry_biology_view(self, request):
current_teacher = User.objects.get(email=request.user.email)
logged_school = current_teacher.school_number
students_involved = User.objects.get(school_number=logged_school).teacher.all()
data = {"student_name": students_involved}
formset_data = AdvancedStudents.objects.filter(class_studying="Form V", combination="PCB")
student_formset = formset_factory(AdvancedBiologyForm, extra=0)
initial = []
for element in formset_data:
initial.append({"student_name": element})
formset = student_formset(request.POST or None, initial=initial)
print(formset.is_valid())
context = {
"students": students_involved,
"formset": formset,
"class_of_students": "Form V",
"subject_name": "Advanced Biology",
}
return render(request, "analyzer/marks_entry/marks_entry_page.html", context)
这是我的表格
class AdvancedBiologyForm(forms.ModelForm):
student_name = forms.CharField()
class Meta:
model = ResultsALevel
fields = ('student_name', 'advanced_biology_1', 'advanced_biology_2',
'advanced_biology_3',)
1条答案
按热度按时间dgjrabp21#
使用前
request.POST
及is_valid()
您可能需要检查是否确实存在post请求,或者是否刚刚查看了页面:否则你可能会打电话
is_valid()
在未绑定的形式上。来自django文档:如果表单是使用post请求提交的,视图将再次创建一个表单示例,并使用请求中的数据填充它:form=nameform(request.post)。这称为“将数据绑定到表单”(现在是绑定表单)。
基本上,如果一个表单是空的,它就是未绑定的,如果它填充了数据,它会在post后绑定。当你打开一个页面并立即尝试“is_valid()”时,当你检查一个空表单是否有效时,它基本上总是错误的;这可能永远不会发生。
要指出错误,请执行以下操作:
这是无效的。因为初始值不等于用“实”值填充表单字段。因此,它试图用
request.POST or None
. 但是你没有一个if request.method == 'POST':
条件因此,您的代码将在到达代码的最后一行之前运行,这是显示页面的返回语句。这意味着您的代码将进行验证request.POST or None
甚至在用户看到页面之前。因此,用户不可能已经输入数据并点击提交。这意味着没有post请求,所以它总是None
. 所以你基本上是在打电话is_valid()
表单中没有字段值,这会导致验证失败。编辑1:我刚注意到你的
forms.py
你写了:这应该是一个列表:
编辑2:修复了错误的变量名编辑3:添加了大量注解以澄清代码中发生了什么编辑4:更清楚地指出了问题的原因。