合肥网站排名优化公司哪家好,做网站需要apache,网站策划建设方案书,怎么做网站代销1.目的是根据员工表字段#xff0c;实现一个新增员工的数据填写页面 2.在views.py文件中按下面的格式写
定义 ModelForm 类#xff1a;UserModelForm #xff08;自己命名的类名#xff09;使用时需要导入包
定义视图函数#xff1a;user_model_form_add#xff08;在函…1.目的是根据员工表字段实现一个新增员工的数据填写页面 2.在views.py文件中按下面的格式写
定义 ModelForm 类UserModelForm 自己命名的类名使用时需要导入包
定义视图函数user_model_form_add在函数中使用form UserModelForm() 定义了一个 Django ModelForm 类 UserModelForm用于创建或编辑 UserInfo 模型的实例表单包含 name、password、age、account、create_time、gender 和 depart 字段。在 __init__ 方法中为每个字段的 HTML 输入元素动态添加了 classform-control 和 placeholder 属性以便使用 Bootstrap 样式并显示字段标签作为占位符。user_model_form_add 视图函数处理 GET 和 POST 请求当用户访问页面时GET 请求渲染一个空表单当用户提交表单时POST 请求验证表单数据如果数据有效则保存到数据库并重定向到 /user/list 页面如果数据无效则打印错误信息用于调试。 表单定义通过 ModelForm 快速生成与模型关联的表单并自定义字段的 HTML 属性。 视图处理处理用户请求显示空表单或验证并保存提交的数据最后重定向或返回错误信息。
注意form.save() 会将数据保存到数据库中这个数据库就是我们在UserModelForm中定义的model models.UserInfo即UserInfo表
from django.shortcuts import render,redirect
from employees import models
from django import formsclass UserModelForm(forms.ModelForm):class Meta:model models.UserInfofields [name,password,age, account, create_time, gender, depart]def __init__(self, *args, **kwargs):# 调用父类的初始化方法super().__init__(*args, **kwargs)# 遍历表单中的所有字段for name, field in self.fields.items():# 为每个字段的 widget 添加 HTML 属性field.widget.attrs {class: form-control, # 添加 Bootstrap 样式placeholder: field.label # 设置占位符为字段的标签}def user_model_form_add(request):# 处理 GET 请求显示空表单if request.method GET:form UserModelForm() # 创建一个空的 UserModelForm 实例# 渲染模板并将表单对象传递给模板return render(request, user_model_form_add.html, {form: form})# 处理 POST 请求提交表单数据form UserModelForm(datarequest.POST)# 验证表单数据是否有效if form.is_valid():# 如果数据有效保存表单数据到数据库form.save()return redirect(/user/list) # 重定向到用户列表页面else:# 如果数据无效打印错误信息用于调试print(form.errors)user_model_form_add.html 使用传递过来的数据 完整代码
{% extends layout.html %}{% block content %}
div classcontainerdiv classc1a classbtn btn-success href/user/add新建用户/a/divdiv classc1a classbtn btn-success href/user/model/form/add新建用户ModelForm/a/divdiv classcard c1div classcard-header新建用户/divdiv classcard-bodyform methodpost{% csrf_token %}{% for field in form%}div classform-labellabel{{ field.label }}/label{{ field }}/div{% endfor %}button typesubmit classbtn btn-primary提交/button/form/div/div/div
{% endblock %}实现效果 输入数据提交 添加成功
3.校验错误信息提示
上面编写的错误输出只是测试我想直接在网页上显示错误提示这样更直观代码修改如下 def user_model_form_add(request):# 处理 GET 请求显示空表单if request.method GET:form UserModelForm() # 创建一个空的 UserModelForm 实例# 渲染模板并将表单对象传递给模板return render(request, user_model_form_add.html, {form: form})# 处理 POST 请求提交表单数据form UserModelForm(datarequest.POST)# 验证表单数据是否有效if form.is_valid():# 如果数据有效保存表单数据到数据库form.save()return redirect(/user/list) # 重定向到用户列表页面else:# 校验失败在页面上显示错误信息return render(request, user_model_form_add.html, {form: form})
user_model_form_add.html增加这一行
span stylecolor: red;{{ field.errors.0 }}/span 效果如下出现提示 上面的是浏览器做的校验我们想自己校验提示增加一个novalidate 效果如下 我想对都写字段增加限制Django会自动检查例如
重写name和password字段设置最小长度和标签如果用户输入的长度不足Django 会自动显示错误提示。 效果 更复杂的写法 注意导入对应的库
from django.shortcuts import render,redirect
from employees import models
from django import forms
from django.core.validators import MinLengthValidator, RegexValidatorclass UserModelForm(forms.ModelForm):name forms.CharField(min_length3,label用户名)password forms.CharField(label密码,widgetforms.PasswordInput(),validators[MinLengthValidator(6, message密码长度不能少于 6 个字符。),RegexValidator(regexr^(?.*\d)(?.*[a-zA-Z]).{6,20}$,message密码必须包含字母和数字且长度为 6-20 个字符。)])class Meta:model models.UserInfofields [name,password,age, account, create_time, gender, depart]def __init__(self, *args, **kwargs):# 调用父类的初始化方法super().__init__(*args, **kwargs)# 遍历表单中的所有字段for name, field in self.fields.items():# 为每个字段的 widget 添加 HTML 属性field.widget.attrs {class: form-control, # 添加 Bootstrap 样式placeholder: field.label # 设置占位符为字段的标签}
效果 如果想修改提示变成中文例如 修改如下 效果 学习【最新Python的web开发全家桶django前端数据库-哔哩哔哩】 https://b23.tv/hSTu5xi