【发布时间】:2020-12-03 23:34:21
【问题描述】:
我正在使用 django 表单提交报告。但是点击提交按钮后,它会发送 POST 请求,但 POST 请求中没有添加任何数据。
这是我的forms.py
class WeeklyForm(forms.Form):
tname = forms.ModelMultipleChoiceField(queryset=CustomTeacher.objects.values_list('tname', flat = True), widget =forms.Select( attrs ={'class': 'form-control' , 'placeholder' : ' Teachers Name '}))
sname = forms.ModelMultipleChoiceField(queryset=CustomStudent.objects.values_list('sname', flat = True), widget =forms.CheckboxSelectMultiple( attrs ={'class': 'form-control' 'form-check-input' 'form-check-inline', 'placeholder' : ' Students Name '}))
class_name = forms.CharField(widget= forms.Select(choices= [('1', 'UKG'), ('2', 'Class 1'), ('3', 'LKG'), ('4', 'Montessori') ] ,attrs={'class': 'form-control', 'placeholder' : 'Select Class'}))
date = forms.DateField(initial = datetime.date.today() , required=False, widget =forms.DateInput( attrs ={'class': 'form-control' , 'placeholder' : ' Date ', 'name' : 'date'}))
objective = forms.CharField(widget = forms.Textarea(attrs={'class': 'form-control', 'placeholder' : 'objective'}))
target = forms.CharField(widget = forms.Textarea(attrs={'class': 'form-control', 'placeholder' : 'target'}))
how = forms.CharField(widget = forms.Textarea(attrs={'class': 'form-control', 'placeholder' : 'how?'}))
material = forms.CharField(widget = forms.Textarea(attrs={'class': 'form-control', 'placeholder' : 'material required'}))
support = forms.CharField(widget = forms.Textarea(attrs={'class': 'form-control', 'placeholder' : 'Any Support Required?'}))
这是来自views.py的函数,我用它来获取数据并插入数据库
view.py
def weekly(request):
context = ''
form = WeeklyForm()
context = {'form': form}
if request.method == 'POST':
form = WeeklyForm(request.POST)
if form.is_valid():
tname1 = form.cleaned_data['teachers']
sname1 = form.cleaned_data['students']
date1 = form.cleaned_data['date']
objective1 = form.cleaned_data['objective']
tplan1 = form.cleaned_data['target']
how1 = form.cleaned_data['how']
material1 = form.cleaned_data['material']
extra1 = form.cleaned_data['support']
print (tname1)
report = wreport(tname = tname1, sname = sname1, fdate = date1, objective = objective1, tplan = tplan1, how = how1, material = material1, extra = extra1)
report.save()
messages.success(request, "Your report was submitted Successfully.")
else:
form = WeeklyForm()
context = {'form': form}
return render(request, 'teacher/weekly.html', context)
我只展示了一个模板示例,因为有很多行代码。 每周.html
<form action="" method="POST">
{% csrf_token %}
<!-- Teacher section -->
<div class="row">
<div class="col-lg-3 mb-2">
<div><strong>Teacher's Name:</strong></div>
</div>
<div class="col-lg-9">
{{ form.teachers }}
</div>
</div>
<!-- Student section -->
<div class="row mt-4">
<div class="col-lg-3">
<!-- name="sname" id="sname" -->
<div><strong>Student's Name:</strong></div>
</div>
<div class="col-lg-9">
<div class="form-check-inline">
<label class="form-check-label">
<!-- {% for student in students %}
<input type="checkbox" class="form-check-input" value="">
{{student.sname}}
{% endfor %} -->
</label>
</div>
{{ form.sname }}
</div>
</div>
<!-- submit button -->
<div class="row">
<div class="mx-auto">
<button type="submit" class="btn btn-outline-dark mb-4 shadow" style="border-radius:25px;">Submit</button>
</div>
</div>
</form>
我已尝试调试和打印从表单接收到的值,但没有打印任何内容。
编辑:经过进一步调试,我发现我的表单没有验证这是我使用form.errors 函数捕获的错误
<ul class="errorlist"><li>tname<ul class="errorlist"><li>Enter a list of values.</li></ul></li><li>sname<ul class="errorlist"><li>“Test Student” is not a valid value.</li></ul></li></ul>
【问题讨论】:
-
你能不能把你的 HTML 因为我认为你没有在你的 HTML 中使用
{{ form }}标签 -
@lbvasoya 我没有在 html 中调用
{{ form }},而是将其称为{{ form.teacher }},正如您在代码中看到的那样,因为我想在使用自定义时获取正确部分中的字段html 样式和带表单的引导程序。所以我只在 html 的各个 div 中从表单中调用一个字段。
标签: html python-3.x django forms django-forms