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 getopt模块处理命令行选项实例
May 13 Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 Python
python使用turtle库绘制时钟
Mar 25 Python
python实现换位加密算法的示例
Oct 14 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
Python查找文件中包含中文的行方法
Dec 19 Python
Python控制键盘鼠标pynput的详细用法
Jan 28 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
Jun 21 Python
python算法与数据结构之冒泡排序实例详解
Jun 22 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
Aug 23 Python
Django中session进行权限管理的使用
Jul 09 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 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
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
jQuery 对象中的类数组操作
2009/04/27 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python解析树及树的遍历
2016/02/03 Python
python字符串连接方法分析
2016/04/12 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
python自定义函数def的应用详解
2020/06/03 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
新闻系毕业生推荐信
2013/11/16 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
房屋产权证明书
2015/06/19 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书
JavaScript实现栈结构详细过程
2021/12/06 Javascript