自定义模型表单字段
通常情况下,模型表单字段与模型字段保持一致。
Django允许在模型表单中覆盖模型字段定义。
举例:E:\HDCZU_Test\chapter7\app\views.py文件
from django.forms import ValidationError
#定义校验age的函数
def validate_age(value):
if int(value)<20:
raise ValidationError("年龄不能小于20",code="min_value")
if int(value)>50:
raise ValidationError("年龄不能大于50",code="max_value")
from django.forms import ModelForm
from app.models import person
#定义模型表单类
class personFormDIY(ModelForm):
#重新定义person模型的字段:age
age=forms.CharField(validators=[validate_age], #validators验证器-函数列表
label="年龄", #为该age字段添加标签说明,如果不设置标签,则在页面上显示的为数据库字段本身的名字
widget=forms.NumberInput(), #用到小部件数字输入文本框
help_text="年龄为[20,50]以内的整数") #为该age字段添加帮助文本说明
class Meta:
model=person #指定模型
fields=["name","age"] #指定字段,引用模型的指定的字段
labels={"name":"姓名"} #为name字段添加标签说明,如果不设置标签,则在页面上显示的为数据库字段本身的名字
help_texts={"name":"姓名为中英文字符串"} #为name字段添加和帮助文本说明
widgets={"name":forms.Textarea(attrs={"cols":30,"rows":2})} #为该name字段设置文本输入框的小部件并设置相应属性
def userPersonFromDIY(request):
if request.method=="POST":
mform=personFormDIY(request.POST)
if mform.is_valid():
ps=person.objects.filter(name=request.POST["name"])
if ps.count()==0:
mform.save()
msg="数据已保存"
else:
msg="数据已存在于数据库,请勿重新提交"
else:
msg="表单数据有误"
else:
mform=personFormDIY()
msg="请输入数据添加新纪录"
return render(request,"tempmodeformdiy.html",{"mform":mform,"msg":msg})
举例:E:\HDCZU_Test\chapter7\app\models.py文件
from django.db import models
class person(models.Model):
name=models.CharField(max_length=50)
age=models.SmallIntegerField()
举例:E:\HDCZU_Test\chapter7\chapter7\urls.py文件
from django.contrib import admin
from django.urls import path
from app import views
urlpatterns = [
path('admin/', admin.site.urls),
path('mdiy/',views.userPersonFromDIY),
]
自定义模型表单字段首次进入提示请输入数据.png
提交新数据提示已保存成功.png
再次提交重复数据提示数据已存在于数据库.png
使用自定义的字段的提示语.png
使用自定义的字段的提示语2.png
网友评论