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 相关文章推荐
使用rpclib进行Python网络编程时的注释问题
May 06 Python
Python 绘图和可视化详细介绍
Feb 11 Python
Python装饰器原理与用法分析
Apr 30 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
Python数据持久化存储实现方法分析
Dec 21 Python
tensorflow 查看梯度方式
Feb 04 Python
Python matplotlib可视化实例解析
Jun 01 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 Python
Python3如何使用多线程升程序运行速度
Aug 11 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 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字符串截取问题
2006/11/28 PHP
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
php中数组最简单的使用方法
2020/12/27 PHP
srcElement表格样式
2006/09/03 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
Python封装原理与实现方法详解
2018/08/28 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
Python基于requests库爬取网站信息
2020/03/02 Python
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
幼师专业求职推荐信
2013/11/08 职场文书
新三好学生主要事迹
2014/01/23 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
给老师的感谢信
2015/01/20 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
老人节主持词
2015/07/04 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript