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学习笔记之常用函数及说明
May 23 Python
Python构建XML树结构的方法示例
Jun 30 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
Sep 14 Python
python利用百度AI实现文字识别功能
Nov 27 Python
python3.4爬虫demo
Jan 22 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
Python中的Cookie模块如何使用
Jun 04 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
Jun 09 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 Python
python爬虫今日热榜数据到txt文件的源码
Feb 23 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中去掉字符串首尾空格的方法
2012/05/19 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
JavaScript实现复制内容到粘贴板代码
2016/03/31 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
JS数组中对象去重操作示例
2019/06/04 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
Python3中exp()函数用法分析
2019/02/19 Python
Python Web静态服务器非堵塞模式实现方法示例
2019/11/21 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
大专毕业生自我鉴定
2013/11/21 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书