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之wxPython菜单使用详解
Sep 28 Python
python3生成随机数实例
Oct 20 Python
python字符类型的一些方法小结
May 16 Python
Python设计模式之中介模式简单示例
Jan 09 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
Python调用服务接口的实例
Jan 03 Python
Python 限制线程的最大数量的方法(Semaphore)
Feb 22 Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 Python
Python通过2种方法输出带颜色字体
Mar 02 Python
Python爬虫requests库多种用法实例
May 28 Python
python基于OpenCV模板匹配识别图片中的数字
Mar 31 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 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 循环列出目录内容的函数代码
2010/05/26 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
js数组如何添加json数据及js数组与json的区别
2015/10/27 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
js实现自定义路由
2017/02/04 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
Python实现遍历数据库并获取key的值
2015/05/17 Python
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
深入浅析python继承问题
2016/05/29 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python切片索引用法示例
2018/05/15 Python
实用自动化运维Python脚本分享
2018/06/04 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
大学生学习自我评价
2014/01/13 职场文书
《蓝色的树叶》教学反思
2014/02/24 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
机房搬迁方案
2014/05/01 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
Python 数据可视化之Seaborn详解
2021/11/02 Python
Nginx 匹配方式
2022/05/15 Servers