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遍历删除字典里值为空的元素报错问题
Sep 11 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
windows下python连接oracle数据库
Jun 07 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
Mar 18 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
django 微信网页授权登陆的实现
Jul 30 Python
python tornado使用流生成图片的例子
Nov 18 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
pandas分批读取大数据集教程
Jun 06 Python
python,Java,JavaScript实现indexOf
Sep 09 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生成html分页列表的代码
2007/03/18 PHP
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
php调用Google translate_tts api实现代码
2013/08/07 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
利用js对象弹出一个层
2008/03/26 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
Vue 全局loading组件实例详解
2018/05/29 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
详解python中的数据类型和控制流
2019/08/08 Python
python批量处理txt文件的实例代码
2020/01/13 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
Python urllib2运行过程原理解析
2020/06/04 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
男方父母证婚词
2014/01/12 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
出纳工作检讨书
2014/10/18 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
angular异步验证器防抖实例详解
2022/03/31 Javascript
Python绘制散乱的点构成的图的方法
2022/04/21 Python