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中的对象拷贝示例 python引用传递
Jan 23 Python
Python+Wordpress制作小说站
Apr 14 Python
python执行使用shell命令方法分享
Nov 08 Python
Python实现两款计算器功能示例
Dec 19 Python
python解析含有重复key的json方法
Jan 22 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python3.4解释器用法简单示例
Mar 22 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
如何表示python中的相对路径
Jul 08 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 Python
pandas中DataFrame检测重复值的实现
May 26 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
中英文字符串翻转函数
2008/12/09 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
php发送post请求的三种方法
2014/02/11 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
统计出现最多的字符次数的js代码
2010/12/03 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
javaScript语法总结
2016/11/25 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
iconfont的三种使用方式详解
2018/08/05 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
python去除扩展名的实例讲解
2018/04/23 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
序列化Python对象的方法
2020/08/01 Python
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
俄语专业职业生涯规划
2014/02/26 职场文书
服装发布会策划方案
2014/05/22 职场文书
四十年同学聚会致辞
2015/07/28 职场文书