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中的描述符(descriptor)
Jun 03 Python
Python的for和break循环结构中使用else语句的技巧
May 24 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
Python实现KNN邻近算法
Jan 28 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
python实现控制COM口的示例
Jul 03 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
Jul 04 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
请求模块urllib之PYTHON爬虫的基本使用
Apr 08 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 class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
浅谈PDO的rowCount函数
2015/06/18 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
JavaScript全局函数使用简单说明
2011/03/11 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
利用Blob进行文件上传的完整步骤
2018/08/02 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
python配置grpc环境
2019/01/01 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
python实现LRU热点缓存及原理
2019/10/29 Python
python常用数据重复项处理方法
2019/11/22 Python
Python将字典转换为XML的方法
2020/08/01 Python
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
财务会计毕业生自荐信
2013/11/02 职场文书
英语专业应届生求职信范文
2013/11/15 职场文书
上班看电影检讨书
2014/02/12 职场文书
青春寄语大全
2014/04/09 职场文书
入党积极分子评语
2014/05/04 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
2019银行竞聘书
2019/06/21 职场文书