单击提交按钮时,表单未提交值

如何解决单击提交按钮时,表单未提交值

我正在使用Django表单提交报告。但是单击提交按钮后,它将发送POST请求,但在POST请求中未添加任何数据。

这是我的表格。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',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>

我已经尝试调试和打印我从表单接收到的值,但是什么也没打印出来。

编辑:进一步调试后,我发现我的表单无法验证这是我使用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>

解决方法

第一个:当您使用queryset属性时,您需要分配查询集,而每当使用choices属性时,您都需要分配列表或字典

第二:,当您尝试请求相同的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?'}))

在这里,我认为是同一网址上的要求

<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>

这里是视图

def weekly(request):
    
    context = ''
    form = WeeklyForm()
    context = {'form': form} 
    if request.method == 'POST':
        form = WeeklyForm(request.POST)

        if form.is_valid():
            data = form.cleaned_data
            print (data)

            report = wreport(tname = data['teachers'],sname = data['students'],fdate = data['date'],objective = data['objective'],tplan = data['target'],how = data['how'],material = data['material'],extra = data['support'])
            report.save()

            messages.success(request,"Your report was submitted Successfully.")
    else:
            form = WeeklyForm()
            context = {'form': form}
    return render(request,'teacher/weekly.html',context)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-