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跳出循环语句continue与break的区别
Aug 25 Python
用Python遍历C盘dll文件的方法
May 06 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 Python
PyTorch上实现卷积神经网络CNN的方法
Apr 28 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
python统计字符的个数代码实例
Feb 07 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
Python 使用生成器代替线程的方法
Aug 04 Python
python selenium 获取接口数据的实现
Dec 07 Python
python设置 matplotlib 正确显示中文的四种方式
May 10 Python
Python 线程池模块之多线程操作代码
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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
jQuery 创建Dom元素
2010/05/07 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
Python深入学习之上下文管理器
2014/08/31 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
Python算法应用实战之队列详解
2017/02/04 Python
解决python 输出是省略号的问题
2018/04/19 Python
python圣诞树编写实例详解
2020/02/13 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
经理职责范文
2013/11/08 职场文书
先进个人评语大全
2015/01/04 职场文书
基层党支部承诺书
2015/04/30 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
详解Python flask的前后端交互
2022/03/31 Python