美文网首页
Django使用自定义模型表单字段

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

作者: Chaweys | 来源:发表于2020-11-05 10:27 被阅读0次

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

    相关文章

      网友评论

          本文标题:Django使用自定义模型表单字段

          本文链接:https://www.haomeiwen.com/subject/mnkwvktx.html