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字符串处理之count()方法的使用
May 18 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
python在线编译器的简单原理及简单实现代码
Feb 02 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
python3 判断列表是一个空列表的方法
May 04 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 Python
Sanic框架流式传输操作示例
Jul 18 Python
python pandas模块基础学习详解
Jul 03 Python
新手入门Python编程的8个实用建议
Jul 12 Python
超简单的Python HTTP服务
Jul 22 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 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发送邮件类代码附详细说明
2008/07/10 PHP
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
10个php函数实用却不常见
2015/10/13 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
js倒计时显示实例
2016/12/11 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
js实现继承的方法及优缺点总结
2019/05/08 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
python检查指定文件是否存在的方法
2015/07/06 Python
简单谈谈python中的多进程
2016/11/06 Python
Python异常处理操作实例详解
2018/05/10 Python
Python2与Python3的区别实例分析
2019/04/11 Python
python异常处理try except过程解析
2020/02/03 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
2014年医院党建工作总结
2014/12/20 职场文书
看雷锋电影观后感
2015/06/10 职场文书
女儿满月酒致辞
2015/07/29 职场文书
运动会开幕式致辞
2015/07/29 职场文书