Python Django form 组件动态从数据库取choices数据实例


Posted in Python onMay 19, 2020

app01/models.py:

from django.db import models
 
class UserInfo(models.Model):
  username = models.CharField(max_length=16)
  password = models.CharField(max_length=16)
  mobile = models.CharField(max_length=11)
 
class City(models.Model):
  name = models.CharField(max_length=16, null=False, unique=True)

往 City 表中添加数据

Python Django form 组件动态从数据库取choices数据实例

这时候需要重启服务才能在页面上显示这些内容

也就是说每次数据库中的内容更新,都需要重启服务才能显示出来

可以通过重写父类中的 __init__ 方法来解决

views.py:

from django.shortcuts import render, HttpResponse
from app01 import models
 
from django import forms
from django.forms import widgets
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
 
 
class RegForm(forms.Form):
  username = forms.CharField(
    min_length=5,
    label="用户名",
    error_messages={
      "min_length": "用户名不能小于5位!",
      "required": "该字段不能为空"
    },
    widget=widgets.TextInput(attrs={"class": "form-control"})
  )
 
  password = forms.CharField(
    min_length=6,
    label="密码",
    error_messages={
      "min_length": "密码不能少于6位!",
      "required": "该字段不能为空"
    },
    widget=widgets.PasswordInput(attrs={"class": "form-control"}, render_value=True)
  )
 
  re_password = forms.CharField(
    min_length=6,
    label="确认密码",
    error_messages={
      "required": "该字段不能为空"
    },
    widget=widgets.PasswordInput(attrs={"class": "form-control"}, render_value=True)
  )
 
  mobile = forms.CharField(
    label="手机号",
    # 自定义正则匹配规则
    validators=[
      RegexValidator(r'^[0-9]+$', "手机号必须是数字"), # 判断手机号是否为数字
      RegexValidator(r'^1[3-9][0-9]{9}$', "手机格式有误") # 判断手机号是否为 1 和 3-9 开头的十一位数
    ],
    error_messages={
      "required": "该字段不能为空",
    },
    widget=widgets.TextInput(attrs={"class": "form-control"})
  )
 
  city = forms.ChoiceField(
    choices=models.City.objects.values_list("id", "name"),
    label="城市",
    initial=2,
    widget=widgets.Select()
  )
 
  # 重写父类的 __init__ 方法
  def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['city'].widget.choices = models.City.objects.values_list("id", "name")
 
  # 判断用户名信息
  def clean_username(self):
    value = self.cleaned_data.get("username")
    if "admin" in value:
      raise ValidationError("用户名不能含有敏感信息")
 
  # 重写父类的 clean 方法
  def clean(self):
    password = self.cleaned_data.get("password")
    re_password = self.cleaned_data.get("re_password")
    if re_password != password:
      self.add_error("password", ValidationError("两次密码不一致"))
      self.add_error("re_password", ValidationError("两次密码不一致"))
      raise ValidationError("两次密码不一致")
    return self.cleaned_data
 
 
def reg2(request):
  form_obj = RegForm() # GET 请求
 
  if request.method == "POST":
    form_obj = RegForm(request.POST)
    # 让 form 来帮我们进行校验
    if form_obj.is_valid():
      # 如果通过校验
      # 所有经过校验的数据都保存在 form_obj.cleaned_data
      print(form_obj.cleaned_data)
      models.UserInfo.objects.create(**form_obj.cleaned_data)
      return HttpResponse("注册成功")
 
  return render(request, "reg2.html", {"form_obj": form_obj})

运行结果:

Python Django form 组件动态从数据库取choices数据实例

以上这篇Python Django form 组件动态从数据库取choices数据实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
Python实现约瑟夫环问题的方法
May 03 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
python基础之包的导入和__init__.py的介绍
Jan 08 Python
python3 读写文件换行符的方法
Apr 09 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
利用Python进行数据可视化常见的9种方法!超实用!
Jul 11 Python
python3 http提交json参数并获取返回值的方法
Dec 19 Python
pycharm显示远程图片的实现
Nov 04 Python
Django cookie和session的应用场景及如何使用
Apr 29 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 Python
Pandas数据结构之Series的使用
Mar 31 Python
Django自关联实现多级联动查询实例
May 19 #Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 #Python
django 数据库返回queryset实现封装为字典
May 19 #Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
May 19 #Python
python 数据分析实现长宽格式的转换
May 18 #Python
如何把外网python虚拟环境迁移到内网
May 18 #Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 #Python
You might like
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
php中的比较运算符详解
2013/10/28 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
Python之eval()函数危险性浅析
2014/07/03 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
韩国现代百货官网:Hmall
2018/03/21 全球购物
C#笔试题
2015/07/14 面试题
企业申诉管理制度
2014/01/30 职场文书
淘宝活动策划方案
2014/02/06 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
教室标语大全
2014/06/21 职场文书
万能检讨书2000字
2014/10/17 职场文书
怎么写工作检讨书
2014/11/16 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
解除处分决定书
2015/06/25 职场文书