Django的ModelForm

基于django.forms.ModelForm:与模型类绑定的Form

先定义一个ModelForm类,继承ModelForm类

from django.forms import ModelForm

class MyModelForm(ModelForm):
    class Meta:
        model=models.UserInfo

        fields="__all__"
        

修改视图函数reg

    def reg(request):
        if request.method=="POST":
            model_form=MyModelForm()

            return render(request,"reg.html",{"model_fom":model_form})

修改reg.html网页

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h4>{{ error_message }}</h4>
    <form action="/reg/" method="post">
        {% csrf_token %}
        {{ model_fom.as_p }}
        <input type="submit">
    </form>
    </body>
    </html>

打开注册页面,可以看到,在定义数据库的用户信息表中定义的字段信息都显示在注册网页上了。

而且这里也支持使用万能的句点号,以及验证用户输入的信息是否与数据库中定义的类型符合

用户输入信息,验证通过后,就要保存到数据库中。

def reg(request):
    if request.method=="GET":
        model_form=MyModelForm()

        return render(request,"reg.html",{"model_form":model_form})
    else: 

        model_form=MyModelForm(request.POST) # 实例化MyModelForm类
        if model_form.is_valid(): # 如果用户输入的信息合法

            model_form.save()       # 用户输入的信息保存到数据库中
            return redirect("/index/")

        return render(request,"reg.html",{"model_form":model_form})

使用ModelForm编辑用户

编辑用户的视图函数如下

    from django.forms import ModelForm

    class MyModelForm(ModelForm):
        class Meta:
            model=models.UserInfo

            fields="__all__"

    def edituser(request,uid):
        user_obj = models.UserInfo.objects.filter(id=uid).first()

        if not user_obj:
            return redirect("/index/")

        if request.method=="GET":

            model_form=MyModelForm(instance=user_obj)

        else:
            model_form=MyModelForm(request.POST,instance=user_obj)

            if model_form.is_valid():
                model_form.save()
                return redirect("/index/")

        return render(request,"edit.html",{"model_form":model_form})

需要注意的是,ModelFormsava的时候有一个commit的参数,commit的值默认为True

当commit等于True的时候,ModelForm就会把数据提交到数据库当中保存;
当commit设定为False的时候,ModelForm并不会真正在数据库中保存数据.

Django的ModelForm的其他的参数和功能

可以在class Meta中设定的功能:

model=models.Userinfo           # 显示对应Model的字段,这里显示用户信息表

fields="__all__"                # 显示数据表中所有的字段

fields=["username","age"]       # 显示数据表中指定的字段

exclude=["email"]               # 不显示数据表中某些字段

labels={
    "username":"用户名",
    "age":"年龄",
    "email":"邮箱"
}                               # 自定义页面的标签

help_texts={
    "username":"请输入正确的用户名",
    "email":"请输入正确的邮箱格式"
}                               # 自定义在标签后面显示的提示帮助信息

error_messages={
    "username":{‘required‘:"用户名不能为空"}
    "email":{‘invalid‘:"邮箱不能为空"}
}                               # 自定义错误信息,用户输入错误时显示

from django import fields as field_widget
field_classes={
    "email":field_widget.EmailField
}                               # 定义标签的类型,在这里把email这个输入框的类型更改为email类型

from django.forms import widgets as formwidget
widgets={
    "username":formwidget.Textarea(atts={"class":"c1"})
}                               # 自定义插件(attrs为插件的属性)
时间: 2024-10-16 01:18:38

Django的ModelForm的相关文章

Django之ModelForm组件

1.Django之ModelForm组件 ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提示信息 help_texts=None, # 帮助提示信息 widgets=None, # 自定义插件 error_messages=None, # 自定义错误信息(整体错误信息from django.core.exceptions import NON_FIE

Django(十四)课程机构列表页数据展示,Django的modelform,关于urls的重新分发

关于urls的重新分发: 如果所有url都配置在根路径的urls.py里,会特别多,而且也不易于修改,Django框架里支持urls的重新分发: 1.在根路径的urls配置上: PS:namespace是定义命名空间,比如下面这种配置, urlpatterns = [ #课程机构url配置,验证码,每个app可以书写自己的url,然后通过include进来 url(r'^org/', include('oraganization.urls',namespace="org")), ] 2

Django的ModelForm简单用法

Django中内置了Form和Model两个类,有时候页面的表单form类与Model类是一一对应,因此分别定义Form类和Model类会比较麻烦,最简单的方式就是通过Model来生成一个Form类,Django内置的ModelForm就是为此而生的.下面以一个简单的例子来说明它的简单用法. 基本需求 收集用户的日本报名信息 其中JLPT的日语等级分为N1,N2,N3,N4,N5:所以需要一个选择器. 用户需要手动输入姓名,因此需要一个输入框. 在Project中新建一个app $ python

Django之modelform

在django中内置了form类和model类,当页面中的form值和model字段值完全一样时,此时可以通过model生成一个完全一样的form,Django中的modelForm就因此而生. 目标: 定义Author表,通过modelform提交数据到数据库 创建工程及app python django-admin.py startproject formstudy cd formstudy python manager.py startapp study 编辑models.py from

Django的ModelForm组件

创建类 from django.forms import ModelForm from django.forms import widgets as wd from app01 import models class 类名(ModelForm): class Meta: model = models.表名 #models中的表名 fields="__all__", # 字段 exclude=None, # 排除字段 widgets=None, # 自定义插件 error_message

Django之ModelForm(一)

要说ModelForm,那就先说Form吧! 先给出一个Form示例: models.py from django.db import models class UserType(models.Model): caption=models.CharField(max_length=32) class UserGroup(models.Model): name=models.CharField(max_length=32) class UserInfo(models.Model): usernam

[django]django的modelform处理数据

django的form处理数据 1.生成html 2.验证数据合法性 3.直接存库 定义1个form class BlogPost(models.Model): title = models.CharField(max_length=150) body = models.TextField() timestamp = models.DateTimeField() 以前是这样的 class BlogPostForm(forms.Form): title = forms.CharField(max_

Django组件-ModelForm

模型表单ModelForm 一.基本用法 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 from django import f

Django之ModelForm使用

一:什么是ModelForm呢? Model + Form ==> ModelForm.model和form的结合体,所以有以下功能: 数据验证 数据库操作 model有操作数据库的字段,form验证也有那几个字段,虽然耦合度降低,但是代码是有重复的.如果利用model里的字段,那是不是form里的字段就不用写了. 二:下面是一个简单是例子: from django.db import models class CustomerInfo(models.Model): ""&quo