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之list和str比较
Sep 20 Python
python使用多线程不断刷新网页的方法
Mar 31 Python
在Python的Flask框架中使用日期和时间的教程
Apr 21 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
Python实现购物程序思路及代码
Jul 24 Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
教你用Python创建微信聊天机器人
Mar 31 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
Python发送邮件的实例代码讲解
Oct 16 Python
基于Python获取照片的GPS位置信息
Jan 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
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
详解vee-validate的使用个人小结
2017/06/07 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
python实现代码审查自动回复消息
2021/02/01 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
简述数组与指针的区别
2014/01/02 面试题
食品业务员岗位职责
2014/03/18 职场文书
十佳护士先进事迹
2014/05/08 职场文书
爱护公共设施标语
2014/06/24 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
房屋维修申请报告
2015/05/18 职场文书
联欢会开场白
2015/06/01 职场文书
幽灵公主观后感
2015/06/09 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
毕业典礼致辞
2015/07/29 职场文书
九年级化学教学反思
2016/02/22 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis