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 相关文章推荐
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
python实现中文转换url编码的方法
Jun 14 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
Jun 06 Python
Python实现操纵控制windows注册表的方法分析
May 24 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
Oct 30 Python
Python Lambda函数使用总结详解
Dec 11 Python
python基于opencv检测程序运行效率
Dec 28 Python
python BeautifulSoup库的安装与使用
Dec 17 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
python APScheduler执行定时任务介绍
Apr 19 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
javascript prototype 原型链
2009/03/12 Javascript
javascript offsetX与layerX区别
2010/03/12 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
基于js disabled="false"不起作用的解决办法
2013/06/26 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
Python兔子毒药问题实例分析
2015/03/05 Python
python实现的jpg格式图片修复代码
2015/04/21 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
自定义django admin model表单提交的例子
2019/08/23 Python
python支持多线程的爬虫实例
2019/12/21 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
计算机专业学生求职信分享
2013/12/15 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
国际金融专业自荐信
2014/07/05 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
工作自我评价范文
2019/03/21 职场文书
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript