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中使用Beautiful Soup库的超详细教程
Apr 30 Python
详解python中requirements.txt的一切
Mar 03 Python
Python实现爬虫爬取NBA数据功能示例
May 28 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
Python音频操作工具PyAudio上手教程详解
Jun 26 Python
python覆盖写入,追加写入的实例
Jun 26 Python
通过python实现随机交换礼物程序详解
Jul 10 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
使用浏览器访问python写的服务器程序
Oct 10 Python
python 实现图片裁剪小工具
Feb 02 Python
python 标准库原理与用法详解之os.path篇
Oct 24 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 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调用JAVA的WebService简单实例
2014/03/11 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
浅析JS抽象工厂模式
2017/12/14 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
Python爬虫工程师面试问题总结
2018/03/22 Python
Flask之flask-script模块使用
2018/07/26 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
详解python中index()、find()方法
2019/08/29 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
keras打印loss对权重的导数方式
2020/06/10 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
幼儿园国庆节活动方案
2014/02/01 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
python3操作redis实现List列表实例
2021/08/04 Python
springboot读取nacos配置文件
2022/05/20 Java/Android