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保存MongoDB上的文件到本地的方法
Mar 16 Python
django Serializer序列化使用方法详解
Oct 16 Python
5分钟 Pipenv 上手指南
Dec 20 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
django 使用 PIL 压缩图片的例子
Aug 16 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 Python
Python 如何定义匿名或内联函数
Aug 01 Python
python-for x in range的用法(注意要点、细节)
May 10 Python
Python中OpenCV实现简单车牌字符切割
Jun 11 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
一个图形显示IP的PHP程序代码
2007/10/19 PHP
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
python局部赋值的规则
2013/03/07 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
python实现视频分帧效果
2019/05/31 Python
Python实现最常见加密方式详解
2019/07/13 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
教师个人成长总结
2015/02/11 职场文书
《颐和园》教学反思
2016/02/19 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python