Django使用自定义模型表单字段

2020-11-05  本文已影响0人  Chaweys

自定义模型表单字段
通常情况下,模型表单字段与模型字段保持一致。
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
上一篇 下一篇

猜你喜欢

热点阅读