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设计模式之代理模式实例
Apr 26 Python
Python对两个有序列表进行合并和排序的例子
Jun 13 Python
在Python中处理XML的教程
Apr 29 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
Sep 26 Python
对python .txt文件读取及数据处理方法总结
Apr 23 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
Python最小二乘法矩阵
Jan 02 Python
在Pycharm中执行scrapy命令的方法
Jan 16 Python
python从入门到精通 windows安装python图文教程
May 18 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
Python程序控制语句用法实例分析
Jan 14 Python
简单了解Django项目应用创建过程
Jul 06 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 class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
django框架如何集成celery进行开发
2017/05/24 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Pytorch之view及view_as使用详解
2019/12/31 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
Python读写压缩文件的方法
2020/07/30 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
大学活动邀请函
2014/01/28 职场文书
生产车间标语
2014/06/11 职场文书
授权委托书(完整版)
2014/09/10 职场文书
横店影视城导游词
2015/02/06 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫