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显示天气预报
Mar 02 Python
Python中lambda的用法及其与def的区别解析
Jul 28 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
Python 实现数据结构中的的栈队列
May 16 Python
Python读写文件基础知识点
Jun 10 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
python中前缀运算符 *和 **的用法示例详解
May 28 Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 Python
python修改微信和支付宝步数的示例代码
Oct 12 Python
Python中time标准库的使用教程
Apr 13 Python
python中 Flask Web 表单的使用方法
May 20 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
博士208HAF收音机实习报告
2021/03/02 无线电
PHP个人网站架设连环讲(三)
2006/10/09 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
Javascript模板技术
2007/04/27 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
JS匀速运动演示示例代码
2013/11/26 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
vue-router history模式下的微信分享小结
2018/07/05 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
Python中random模块生成随机数详解
2016/03/10 Python
Python做智能家居温湿度报警系统
2018/09/25 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
python 进程的几种创建方式详解
2019/08/29 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
新娘父亲婚礼致辞
2014/01/16 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
公司办公室岗位职责
2014/03/19 职场文书
商场周年庆活动方案
2014/08/19 职场文书
公务员检讨书
2014/11/01 职场文书
Python实现滑雪小游戏
2021/09/25 Python
Python 正则模块详情
2021/11/02 Python