django之modelform详解(代码片段)

mengchangxin mengchangxin     2022-12-09     267

关键词:

ModelForm 是 Django 中编写基于 Model 定制表单的方法,可以提高 Model 复用性。

 

使用时 Django 会根据 django.db.models.Field (用于数据库衔接) 自动转化为 django.forms.Field (用于表单前端展示、后端验证)。

 

 

编辑数据:

如果不用ModelForm,编辑的时候得显示之前的数据吧,还得挨个取一遍值,如果ModelForm,只需要加一个instance=obj(obj是要修改的数据库的一条数据的对象)就可以得到同样的效果。

保存的时候要注意,一定要注意有这个对象(instance=obj),否则不知道更新哪一个数据。

代码示例:

from django.shortcuts import render,HttpResponse,redirect
from django.forms import ModelForm
# Create your views here.
from app01 import models

def test(request):

    # model_form = models.Student
    model_form = models.Student.objects.all()
    return render(request,‘test.html‘,‘model_form‘:model_form)


class StudentList(ModelForm):
    class Meta:
        model = models.Student  #对应的Model中的类
        fields = "__all__"      #字段,如果是__all__,就是表示列出所有的字段
        exclude = None          #排除的字段
        labels = None           #提示信息
        help_texts = None       #帮助提示信息
        widgets = None          #自定义插件
        error_messages = None   #自定义错误信息
#error_messages用法:
        error_messages = 
            ‘name‘:‘required‘:"用户名不能为空",,
            ‘age‘:‘required‘:"年龄不能为空",,
        

#widgets用法,比如把输入用户名的input框给为Textarea
#首先得导入模块
        from django.forms import widgets as wid  #因为重名,所以起个别名
        widgets = 
            "name":wid.Textarea
        
#labels,自定义在前端显示的名字
        labels= 
            "name":"用户名"
        
def student(request):

    if request.method == ‘GET‘:
        student_list = StudentList()
        return render(request,‘student.html‘,‘student_list‘:student_list)
    else:
        student_list = StudentList(request.POST)
        if student_list.is_valid():
            student_list.save()
        return render(request,‘student.html‘,‘student_list‘:student_list)

def student_edit(request,pk):
    obj = models.Student.objects.filter(pk=pk).first()
    if not obj:
        return redirect(‘test‘)
    if request.method == "GET":
        student_list = StudentList(instance=obj)
        return render(request,‘student_edit.html‘,‘student_list‘:student_list)

    else:
        student_list = StudentList(request.POST,instance=obj)
        if student_list.is_valid():
            student_list.save()
        return render(request,‘student_edit.html‘,‘student_list‘:student_list)

使用ModelForm编辑数据

  

对于验证规则,很多浏览器都比较智能,会自动帮我们做一些验证,可以在form表单上加  novalidate 属性就可以不让浏览器为我们做验证

ModelForm还支持所有form的功能,比如钩子,所以我们就可以通过钩子来自定义验证规则

写法和forms的写法一样:

class AuthorForm(forms.ModelForm):
    class Meta:
        model = Author
        fields = (‘name‘, ‘title‘)

    def clean_name(self):
        if ...
             return self.clean_data[‘name‘]
       else:
             raise ValidationError(‘sdgsadga’)
        ...

  

 

https://www.cnblogs.com/DI-DIAO/p/8978780.html

django之modelform组件(代码片段)

ModelForm组件是django中一个非常强大的组件,其功能主要有一校验字段  ModelForm组件的主要格式为:继承组件fromdjangoimportformsclassUserModelForm(forms.ModelForm):指定表model=models.UserInfo指定要显示的字段fields=‘__all__‘#显示所有,常... 查看详情

django之modelform(代码片段)

要说ModelForm,那就先说Form吧!先给出一个Form示例:models.pyfromdjango.dbimportmodelsclassUserType(models.Model):caption=models.CharField(max_length=32)classUserGroup(models.Model):name=models.CharField(max_length=32) 查看详情

django之modelform(代码片段)

简介Model+Form==>ModelForm。model和form的结合体,所以有以下功能:验证数据库操作Form回顾models.pyclassUserType(models.Model):caption=models.CharField(max_length=32)classUserInfo(models.Model):username=models.CharField(max_le 查看详情

django之modalform(代码片段)

ModelForm自己定义的form--->Form--->BaseForm自己定义的ModelForm--->ModelForm--->BaseModelForm--->BaseForm从上面可以看出form和ModelForm都是继承BaseForm,所以在Form中有的方法在ModelForm中也是有的,包括is_vali 查看详情

django框架之modelform组件(代码片段)

浏览目录创建mldelform添加记录编辑记录 Django框架中的modelform组件通过名字我们可以看出来,这个组件的功能就是把model和form组合起来。下面我们来看一个例子:比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱... 查看详情

django框架之modelform组件(代码片段)

浏览目录创建mldelform添加记录编辑记录 Django框架中的modelform组件通过名字我们可以看出来,这个组件的功能就是把model和form组合起来。下面我们来看一个例子:比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱... 查看详情

django之modelform使用(代码片段)

一:什么是ModelForm呢?Model+Form==>ModelForm。model和form的结合体,所以有以下功能:数据验证数据库操作model有操作数据库的字段,form验证也有那几个字段,虽然耦合度降低,但是代码是有重复的。如果利用model里的字段,那是不... 查看详情

django之modelform组件(代码片段)

  1ModelForm2a.classMeta:3model,#对应Model的4fields=None,#字段5exclude=None,#排除字段6labels=None,#提示信息7help_texts=None,#帮助提示信息8widgets=None,#自定义插件9error_messages=None,#自定义错误信息(整体错误信息fromdjango.core.exceptionsimportNON_FIELD_ERRO... 查看详情

django之modelform组件(代码片段)

1ModelForm2a.classMeta:3model,#对应Model的4fields=None,#字段5exclude=None,#排除字段6labels=None,#提示信息7help_texts=None,#帮助提示信息8widgets=None,#自定义插件9error_messages=None,#自定义错误信息(整体错误信息fromdjango.core.exceptionsimportNON_FIELD_ERRORS)1... 查看详情

django之modelform

 顾名思义,Model+Form==ModelForm。model和form的合体,所以有以下功能:验证数据字段(Form的功能)数据库操作(Model的功能)model有操作数据库的字段,form验证也有那几个字段,虽然耦合度降低,但是代码是有重复的。如果利用... 查看详情

django组件-modelform(代码片段)

ModelForm组件功能就是把model和form组合起来.首先导入ModelFormfromdjango.formsimportModelForm在视图函数中,定义一个类,比如就叫StudentList,这个类要继承ModelForm,在这个类中再写一个原类Meta(规定写法,并注意首字母是大写的)在这个原类中,有... 查看详情

django之modelform组件

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950ModelForm    a.  class Meta:       &nbs 查看详情

django之modelform组件

Django之ModelForm组件 ModelForma.classMeta:model,#对应Model的fields=None,#字段exclude=None,#排除字段labels=None,#提示信息help_texts=None,#帮助提示信息widgets=None,#自定义插件error_messages=None,#自定义错误信息(整体错误信息fromdjango.co 查看详情

[django]django的modelform处理数据(代码片段)

django的form处理数据1.生成html2.验证数据合法性3.直接存库定义1个formclassBlogPost(models.Model):title=models.CharField(max_length=150)body=models.TextField()timestamp=models.DateTimeField()以前是这样的classBlogPostForm(forms.For 查看详情

django之httpresponse和jsonresponse详解(代码片段)

HttpResponse对象Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个HttpRequest对象传给视图函数。那么视图函数在处理完相关的逻辑后,也需要返回一个响应给浏览器。而这个响应,我们必须返回HttpRes... 查看详情

django之form表单(代码片段)

...的字段与验证器5:自定义验证器6: 提取错误信息7:ModelForm:  (1)自定义错误消息  (2)save()方法 1什么是表单:表单是用来收集用户信息的表的集合,比如用户在网站上登入(输入自己的用户名,密码提交到网... 查看详情

django中的modelform和modelfoemset(代码片段)

一.ModelForm  ModelForm是根据Model来定制的Form二.ModelForm的创建fromdjangoimportformsfromappimportmodelsclassMyModelForm(forms.ModelForm):classMeta:model=models.Bookfields="__all__"    labels=        "title":"书名",        "price":"价格" ... 查看详情

django使用modelform一步保存数据(代码片段)

...django官方文档https://docs.djangoproject.com/zh-hans/2.0/topics/forms/modelforms/首先,创建的form类,会有个meta类,meta类里的要定义一个model,即是form表单连接的model,然后fields里是你所需要的model的字段,就像这样1classMeta:2model=Model_Supply3fields 查看详情