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提示No module named images的解决方法
Sep 29 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
Python 读取指定文件夹下的所有图像方法
Apr 27 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
python中的3种定义类方法
Nov 27 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 syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
php设计模式 Composite (组合模式)
2011/06/26 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
社会学专业学生职业规划书
2014/02/07 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
公开承诺书格式
2014/05/21 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
2015年科协工作总结
2015/05/19 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
Django实现聊天机器人
2021/05/31 Python
Sql Server之数据类型详解
2022/02/28 SQL Server
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers