Html 单击“提交”按钮时表单未提交值

Html 单击“提交”按钮时表单未提交值,html,python-3.x,django,forms,django-forms,Html,Python 3.x,Django,Forms,Django Forms,我正在使用django表格提交报告。但在点击提交按钮后,它会发送POST请求,但POST请求中不会添加任何数据 这是我的表格 class WeeklyForm(forms.Form): tname = forms.ModelMultipleChoiceField(queryset=CustomTeacher.objects.values_list('tname', flat = True), widget =forms.Select( attrs ={'class': 'form-c

我正在使用django表格提交报告。但在点击提交按钮后,它会发送POST请求,但POST请求中不会添加任何数据

这是我的表格

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)
我只展示了一个模板的例子,因为有很多行代码。 weekly.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>

首先:使用queryset属性时,需要分配queryset;使用choices属性时,需要分配list或dict

第二步:当您尝试请求相同的URL时。您必须删除表单中的动作

当您想在另一个URL上执行请求时。您必须添加正在调用的视图的操作url

这里是form.py

class WeeklyForm(forms.Form): 

    tname = forms.ModelMultipleChoiceField(queryset=CustomTeacher.objects.all(), widget =forms.Select( attrs ={'class': 'form-control' , 'placeholder' : ' Teachers Name '}))

    sname = forms.ModelMultipleChoiceField(queryset=CustomStudent.objects.all(), 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?'}))
<>这里我考虑在同一URL < /P>上的要求
<form method="POST">
    {% csrf_token %}
    <!-- Teacher section  -->
    <div class="row">
        <div class="col-lg-3 mb-2">
            <div><strong>Teachers Name:</strong></div>
        </div>
        <div class="col-lg-9">
            {{ form.teachers }}
        </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>

希望您理解我想说的,首先让我知道任何查询关注点:当您使用queryset属性时,您需要分配queryset;当使用choices属性时,您需要分配list或dict

第二步:当您尝试请求相同的URL时。您必须删除表单中的动作

当您想在另一个URL上执行请求时。您必须添加正在调用的视图的操作url

这里是form.py

class WeeklyForm(forms.Form): 

    tname = forms.ModelMultipleChoiceField(queryset=CustomTeacher.objects.all(), widget =forms.Select( attrs ={'class': 'form-control' , 'placeholder' : ' Teachers Name '}))

    sname = forms.ModelMultipleChoiceField(queryset=CustomStudent.objects.all(), 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?'}))
<>这里我考虑在同一URL < /P>上的要求
<form method="POST">
    {% csrf_token %}
    <!-- Teacher section  -->
    <div class="row">
        <div class="col-lg-3 mb-2">
            <div><strong>Teachers Name:</strong></div>
        </div>
        <div class="col-lg-9">
            {{ form.teachers }}
        </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>

希望你能理解我想说的让我知道任何查询问题

你能把你的HTML放进去吗,因为我认为你没有在你的文档中使用
{{form}
标记HTML@l.b.vasoya我不是用html调用
{{form}
,而是用
{{form.teacher}调用它
正如您在代码中看到的,因为我希望在适当的部分中获取字段,因为我正在使用自定义html样式和引导表单。因此,我只从html中相应div的form中调用一个字段。您能把html放在这里吗?因为我认为您在您的应用程序中没有使用
{{form}
标记HTML@l.b.vasoya我不是用html调用
{{form}
,而是用
{{form.teacher}调用它
正如您在代码中看到的,因为我希望在适当的部分中获取字段,因为我正在使用自定义html样式和引导表单。所以我只调用html中相应div中表单中的一个字段。谢谢您的回答。调试完我的问题后,我发现表单没有为
sname
验证,我将更新该部分的html和
form.errors
。因此,我认为您必须回答您的问题,并接受这样一个事实,即在未来的社区中,人们可以看到并得到问题,它的答案通常对所有人都很好,这不是答案。我无法理解为什么表单未验证复选框。使用表单中的
CheckboxSelectMultiple
字段。您必须传递
sname=forms.modelmultipechoicefield(queryset=CustomStudent.objects.all(),widget=forms.CheckboxSelectMultiple(attrs={'class':'form control''表单检查输入''表单检查内联','占位符':'Students Name'})
您需要在queryset属性上传递queryset如果您使用choices,那么您必须修改并分配list或dict of choice让我知道它在为sname清除错误后工作现在它会通知tname,这是一个下拉字段,所以我使用了
表单。选择
正如您可以看到的那样,对于queryset,我已经将queryset for tname字段更新为w这是一个新的错误>
  • 输入一个值列表。
  • 谢谢您的回答。调试完我的问题后,我发现表单没有验证
    sname
    的有效性,我将更新该部分的html和
    表单。错误
    。因此我认为您必须回答您的问题,并接受这一点,因为在未来的社区中,人们可以看到并获得这些信息这个问题和它的答案我很乐意为大家解答,这通常不是一个答案。我无法理解表单为什么不验证复选框。使用
    CheckboxSelectMultiple
    表单中的字段。您必须传递
    sname=forms.modelmultipleechoicefield(queryset=CustomStudent.objects.all(),widget=forms.CheckboxSelectMultiple(attrs={'class':'form control''表单检查输入''表单检查内联','placeholder':'Students Name'})
    您需要在queryset属性上传递queryset如果您使用choices,那么您必须修改并分配list或dict of choice让我知道它在为sname清除错误后工作现在它会通知tname,这是一个下拉字段,所以我使用了
    表单。选择
    正如您可以看到的那样,对于queryset,我已经将queryset for tname字段更新为w这是一个新的错误,输入一个值列表。