Django forms表单 select下拉框的传值实例


Posted in Python onJuly 19, 2019

今儿继续做项目,学习了Django的forms生成前端的代码。

forms.py

class SignupForm(forms.Form):
  username = forms.CharField(validators=[user_unique_validate, username_rule_validate, ], required=True,
                max_length=30, min_length=5,
                error_messages={'required': '用户名不能为空', 'max_length': '用户名至少5位',
                        'min_length': '用户名最多30位'})
  password = forms.CharField(min_length=6, max_length=50, required=True,
                error_messages={'required': '密码不能为空',
                        'invalid': '密码格式错误',
                        'min_length': '密码不能少于6位',
                        'max_length': '密码最多50位'})
  classInfo = forms.ModelChoiceField(queryset=ClassInfo.objects.all(), required=True, empty_label=None, initial="预设值")#这里加的是班级名字
  email = forms.EmailField(validators=[email_unique_validate, ], required=True,
               error_messages={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'})
  mobile = forms.CharField(validators=[mobile_validate, ], required=True,
               error_messages={'required': '手机号不能为空'})

然后views通过get方法获得表单的form

class SignupView(View):
  def get(self, request):
    obj = SignupForm()
    return render(request, 'user/signup.html', locals())

这里可以打印出来obj,可以看到表单类已经帮我们生成了前端代码

<tr><th><label for="id_username">Username:</label></th><td><input type="text" name="username" value="123123" minlength="5" maxlength="30" required id="id_username"></td></tr>
<tr><th><label for="id_password">Password:</label></th><td><input type="text" name="password" value="213123" minlength="6" maxlength="50" required id="id_password"></td></tr>
<tr><th><label for="id_classInfo">Classinfo:</label></th><td>
<select name="classInfo" id="id_classInfo">
 <option value="1" selected>15医药软件</option>
 <option value="2">15医药信息</option>
</select></td></tr>
<tr><th><label for="id_email">Email:</label></th><td><input type="email" name="email" value="123123231@qq.com" required id="id_email"></td></tr>
<tr><th><label for="id_mobile">Mobile:</label></th><td><input type="text" name="mobile" value="13328768123" required id="id_mobile"></td></tr>

其中select下拉框里的内容是从数据库中取出来的,利用ModelChoiceField,设置queryset来取出数据,这样实现动态存取select中的值。

而前端代码可以直接使用这个表单变量obj

<form method="post" action="{% url 'signup' %}">
  ...
  {% for field in obj %}
    {{ field }}
  {% end for %}
  ...
</form>

但是我这里没有设置label值,就没有直接这样偷懒,而是自己写了一个

<form method="post" action="{% url 'signup' %}>
....
   <tr>
     <td width="120" align="right" valign="top">用户名(学号)</td>
     <td width="auto" align="left"><input type="text" name="username" class="sls">        </td>
   </tr>
   <tr>
     <td width="120" align="right">密码</td>
     <td width="auto" align="left"><input type="password" name="password" class="sls"></td>
   </tr>
   <tr>
     <td width="120" align="right" valign="top">电子邮件</td>
     <td width="auto" align="left"><input type="text" name="email" class="sls"></td>
   </tr>
   <tr>
     <td width="120" align="right">班级</td>
     <td width="auto" align="left">
        {{ obj.classInfo }}
     </td>
   </tr>
   <tr>
     <td width="120" align="right" valign="top">手机号</td>
     <td width="auto" align="left"><input type="text" class="sls" name="mobile"></td>
   </tr>
....

前期我一直在用select标签来写,然后传值到option里,但是我发现通过再用obj.classInfo取里面的值时出现空白值

就类似于原本数据库存着两个选项,然后前端显示-------;选项一;空白;选项二;空白。

经过一番查找,出现-----这个选项是因为没有设置初始值,然后设置了initial

出现两个变量就是因为粗心大意,obj.classInfo本身就是个select标签,里面就有两个选项。

之后就是post提交验证,然后就是存值render操作了

def post(self, request):
    has_error = True
    obj = SignupForm(request.POST)
    #print(obj)
    if obj.is_valid():
      has_error = False
      username = obj.cleaned_data['username']
      password = obj.cleaned_data['password']
      class_name = obj.cleaned_data['classInfo']
      email = obj.cleaned_data['email']
      mobile = obj.cleaned_data['mobile']
  ......

以上这篇Django forms表单 select下拉框的传值实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
小结Python用fork来创建子进程注意事项
Jul 03 Python
Python进阶篇之字典操作总结
Nov 16 Python
简单了解OpenCV是个什么东西
Nov 10 Python
Python中if elif else及缩进的使用简述
May 31 Python
python3监控CentOS磁盘空间脚本
Jun 21 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
Aug 01 Python
Python实现多线程/多进程的TCP服务器
Sep 03 Python
python爬虫可以爬什么
Jun 16 Python
Python中pass的作用与使用教程
Nov 13 Python
Python中的面向接口编程示例详解
Jan 17 Python
Django组件content-type使用方法详解
Jul 19 #Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 #Python
django admin组件使用方法详解
Jul 19 #Python
使用python分析统计自己微信朋友的信息
Jul 19 #Python
django url到views参数传递的实例
Jul 19 #Python
Django  ORM 练习题及答案
Jul 19 #Python
Django之提交表单与前后端交互的方法
Jul 19 #Python
You might like
PHP 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
给Python入门者的一些编程建议
2015/06/15 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
用python实现学生管理系统
2020/07/24 Python
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
Java如何格式化日期
2012/08/07 面试题
幼师自我鉴定范文
2013/10/01 职场文书
竟聘演讲稿范文
2013/12/31 职场文书
《胡杨》教学反思
2014/02/16 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
班级课外活动总结
2014/07/09 职场文书
交通违章检讨书
2014/09/21 职场文书
六查六看自查报告
2014/10/14 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python