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实现八大排序算法
Aug 13 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 Python
Python打印“菱形”星号代码方法
Feb 05 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
Python编程深度学习绘图库之matplotlib
Dec 28 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
详解django使用include无法跳转的解决方法
Mar 19 Python
树莓派升级python的具体步骤
Jul 05 Python
Python调用jar包方法实现过程解析
Aug 11 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 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正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
jQuery ready函数滥用分析
2011/02/16 Javascript
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
给文字加上着重号的JS代码
2013/11/12 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
JavaScript字符串对象
2017/01/14 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
python实现获取序列中最小的几个元素
2014/09/25 Python
python写入文件自动换行问题的方法
2019/07/05 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
使用Python的turtle模块画国旗
2019/09/24 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
Python 绘制可视化折线图
2020/07/22 Python
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
办护照工作证明范本
2014/01/14 职场文书
实习单位指导教师评语
2014/12/30 职场文书
2015年党建工作总结
2015/03/30 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
sql注入教程之类型以及提交注入
2021/08/02 MySQL
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python