Python Django form 组件动态从数据库取choices数据实例
作者:Sch01aR# 发布时间:2024-01-21 17:00:52
标签:Django,form,choices
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 表中添加数据
这时候需要重启服务才能在页面上显示这些内容
也就是说每次数据库中的内容更新,都需要重启服务才能显示出来
可以通过重写父类中的 __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})
运行结果:
来源:https://www.cnblogs.com/sch01ar/p/11502828.html


猜你喜欢
- 本文实例讲述了python中__slots__的用法。分享给大家供大家参考。具体分析如下:定义__slots__ 后,可以再实例上分配的属性
- Python数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:GadFlymSQL MySQL PostgreSQL Micros
- 本文实例讲述了JS页面获取 session 值,作用域和闭包。分享给大家供大家参考,具体如下:Javascript获取session的值:v
- Python文件遍历os.walk()与os.listdir()在图片处理过程中,样本数据的组织是个常见的问题,样本组织好了,后面数据转换、
- 程序中常常需要复制一个对象, 按思路应该是这样的a = [1, 2, 3]b = a# [1, 2, 3]print b 已经复制好了,但是
- SQL2005安装安装步骤安装Microsoft SQL Server 2005 数据库步骤:第一步:将Microsoft SQL Serv
- ScrapyScrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时
- 本文实例为大家分享了python实现12306图片验证效果的具体代码,供大家参考,具体内容如下思路:在鼠标点击位置加一个按钮,然后再按钮中的
- 拼接字符串使用“+”运算符可完成对多个字符串的拼接,“+”运算符可以连接多个字符串并产生一个字符串对象。字符串不允许直接与其他类型数据拼接。
- Python 私有函数的实例详解与大多数语言一样,Python 也有私有的概念:• 私有函数不可以从它们的模块外面被调用• 私有类方法不能够
- 本文实例为大家分享了vue实现Input输入框模糊查询方法的具体代码,供大家参考,具体内容如下原理:原生js的indexOf() 方法,该方
- 由于想要使用pycharm连接Window子系统Ubuntu进行开发,找了很多教程都不够详细,花了点儿时间,最后配置成功。将pycharm连
- 是时候了—— 在大部分情况下当用户输入密码时把它们用清晰的文字显示出来。一直以来,提供反馈、把系统状态形象化是最基本的可用性原则,当用户输入
- # _*_ coding:utf-8 _*_# name start_qq.pyimport osos.startfile("C:
- 地图这期文章我们一起来看看地图是如何绘制的,如何在地图里面添加数据进行多维度的展示,下面我们一起来感受一下地图的魅力吧!&ldquo
- 一、数据库介绍1、为什么要学习数据库通常,我们存储数据,直接用本地文件即可,但是,本地文件不利于存放海量数据,也不利于用程序对文件的数据进行
- Python读取及保存mat文件在说明python读取mat文件之前需要强调2点:读取的时候需要注意读出来的shape是什么样的,是否符合自
- 开发环境解释器版本: python 3.8代码编辑器: pycharm 2021.2第三方模块requests: pip install r
- socket接口是实际上是操作系统提供的系统调用。socket的使用并不局限于Python语言,你可以用C或者Java来写出同样的socke
- matplotlib官网matplotlib库默认英文字体添加黑体(‘SimHei')为绘图字体代码:plt.rcParams[