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中使用strip()方法删除字符串中空格的教程
May 20 Python
python中sys.argv参数用法实例分析
May 20 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
Python爬虫之网页图片抓取的方法
Jul 16 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
Dec 05 Python
浅谈django channels 路由误导
May 28 Python
python实现数字炸弹游戏
Jul 17 Python
Python中threading库实现线程锁与释放锁
May 17 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利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
php命令行写shell实例详解
2018/07/19 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
简单的Vue异步组件实例Demo
2017/12/27 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
python中turtle库的简单使用教程
2020/11/11 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
土地转让协议书
2014/04/15 职场文书
财务部绩效考核方案
2014/05/04 职场文书
家长会欢迎标语
2014/06/24 职场文书
贷款委托书
2014/08/01 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python