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 的 Socket 编程
Mar 24 Python
Python实现列表转换成字典数据结构的方法
Mar 11 Python
浅谈Python中函数的参数传递
Jun 21 Python
用Python解决计数原理问题的方法
Aug 04 Python
浅析Git版本控制器使用
Dec 10 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
python运用pygame库实现双人弹球小游戏
Nov 25 Python
Python实现UDP程序通信过程图解
May 15 Python
Python datetime 如何处理时区信息
Sep 02 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 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生成EXCEL的东东
2006/10/09 PHP
Adodb的十个实例(清晰版)
2006/12/31 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
CL vs ForZe BO5 第五场 2.13
2021/03/10 DOTA
xss文件页面内容读取(解决)
2010/11/28 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
python实现的多线程端口扫描功能示例
2017/01/21 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
Python类及获取对象属性方法解析
2020/06/15 Python
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
100%羊绒:NakedCashmere
2020/08/26 全球购物
快递业务员岗位职责
2014/01/06 职场文书
经贸韩语专业大学生职业规划
2014/02/14 职场文书
《湘夫人》教学反思
2014/02/21 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
2014年服务员工作总结
2014/11/18 职场文书
2014年妇联工作总结
2014/11/21 职场文书
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
MySQL 数据类型选择原则
2021/05/27 MySQL