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中用PIL库批量给图片加上序号的教程
May 06 Python
详解用python实现简单的遗传算法
Jan 02 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
利用Opencv中Houghline方法实现直线检测
Feb 11 Python
Python控制键盘鼠标pynput的详细用法
Jan 28 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
wxPython实现画图板
Aug 27 Python
python实现实时视频流播放代码实例
Jan 11 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
python多线程semaphore实现线程数控制的示例
Aug 10 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
python 实现端口扫描工具
Dec 18 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加密解密的代码
2006/10/09 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
php实现httpclient类示例
2014/04/08 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
浅析php单例模式
2014/11/25 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
js获取url参数的使用扩展实例
2007/12/29 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
详解Python发送邮件实例
2016/01/10 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Python中字符串List按照长度排序
2019/07/01 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
做一个有道德的人演讲稿
2014/05/14 职场文书
公司运动会策划方案
2014/05/25 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
难以忽视的真相观后感
2015/06/05 职场文书