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 相关文章推荐
sqlalchemy对象转dict的示例
Apr 22 Python
Python中的exec、eval使用实例
Sep 23 Python
基于python 字符编码的理解
Sep 02 Python
Python生成数字图片代码分享
Oct 31 Python
django使用LDAP验证的方法示例
Dec 10 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 Python
 分享一个Python 遇到数据库超好用的模块
Apr 06 Python
python实现学生信息管理系统(面向对象)
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
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
jQuery中Find选择器用法示例
2016/09/21 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
vue监听dom大小改变案例
2020/07/29 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
简单了解python中对象的取反运算符
2019/07/01 Python
Django集成celery发送异步邮件实例
2019/12/17 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
教师试用期自我鉴定
2014/02/12 职场文书
学校后勤岗位职责
2014/02/19 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
家装电话营销开场白
2015/05/29 职场文书
在职证明书模板
2015/06/15 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS