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 匹配任意字符(包括换行符)的正则表达式写法
Oct 29 Python
python实现Floyd算法
Jan 03 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
Python 获取 datax 执行结果保存到数据库的方法
Jul 11 Python
利用python计算时间差(返回天数)
Sep 07 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
k-means 聚类算法与Python实现代码
Jun 01 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 Python
Python使用openpyxl模块处理Excel文件
Jun 05 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之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
详解node中创建服务进程
2017/05/09 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
用python实现百度翻译的示例代码
2018/03/09 Python
tensorflow获取变量维度信息
2018/03/10 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
九年级数学教学反思
2014/02/02 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
学生保证书范文
2014/04/28 职场文书
保护环境演讲稿
2014/05/10 职场文书
申论倡议书范文
2014/05/13 职场文书
应届生求职信范文
2014/05/26 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
公司委托书格式范本
2014/09/16 职场文书
四大名著读书笔记
2015/06/25 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
Python实现信息管理系统
2022/06/05 Python