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 中__name__ = '__main__' 的作用
Jul 05 Python
Django的信号机制详解
May 05 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
Jul 11 Python
浅谈python数据类型及类型转换
Dec 18 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
利用nohup来开启python文件的方法
Jan 14 Python
Python实现DDos攻击实例详解
Feb 02 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
python中什么是面向对象
Jun 11 Python
浅析python 字典嵌套
Sep 29 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 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
用header 发送cookie的php代码
2007/03/16 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
destoon复制新模块的方法
2014/06/21 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
php数组分页实现方法
2016/04/30 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
js面向对象的写法
2016/02/19 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
python pickle 和 shelve模块的用法
2013/09/16 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
英国手机零售商:Metrofone
2019/03/18 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
妇产科护士自我鉴定
2013/10/15 职场文书
装修致歉信
2014/01/15 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
土建施工员岗位职责
2015/04/11 职场文书
八月一日观后感
2015/06/10 职场文书
孟佩杰观后感
2015/06/17 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android