day23-ModelForm基本使用

一、前言

  之前我们讲了,from + model 去验证,我个人以后验证也用这种方式,因为这种方式降低了耦合度,就是from只是单纯的字段验证,而model就是单纯的数据库设置,两者之间并没有直接的联系,但是今天我们要学习的是ModelForm,它跟上面还不一样,它是一个整体,所以它的耦合度更高一些,我们一般情况下,只写一些小项目的时候会用这个modelfrom,如果写大项目的话,还是建议用 form + model 这种方式去验证,好啦,废话不多说了,下面我们就来学习一下ModelForm吧!

二、创建models

说明:我们创建modelForm之前先设置两张表,虽然只用到其中的一张,但是我们还是弄两张比较好,在app下的models中去创建

from django.db import models

# Create your models here.

class UserType(models.Model):
    caption = models.CharField(max_length=32)

class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    email = models.EmailField()
    user_type = models.ForeignKey(to="UserType",to_field='id',on_delete=models.CASCADE)

三、创建modelForm

3.1、创建modelform

说明:我们先创建modelfrom,modelform是继承 BaseModelForm ->继承BaseForm,所以最终还是继承的BaseForm,这个跟我们的Form继承是一个老祖宗,这个可以 根据 ctrl + ModelForm去找一下

from app01 import models
from django import forms
from django.forms import fields

class UserInfoModelForm(forms.ModelForm): #还是在forms里面,需要继承modelform

    class Meta:
        model = models.UserInfo  #表示去哪一个类里面去获取字段
        # fields = '__all__' #能获取字段,也可以对这张表进行增删改查,all表示展示所有列
        fields = ['username',]  #只选择username列,这个是UserInfo中的字段
        #
        # exclude = ["username"] #排除username字段,展示其他字段

 3.2、index函数验证

说明:我们设置好modelform之后,去验证modelform

def index(request):
    if request.method == "GET":
        obj = UserInfoModelForm()  #验证时,创建modelform对象
        return render(request,'index.html',{'obj':obj})
    elif request.method == "POST":
        obj = UserInfoModelForm(request.POST) #在views函数里面做校验
        return  render(request,'index.html',{'obj':obj})

3.3、模板设置

说明:根据index函数,我们获取标签

<body>
    <form>
        {{ obj.as_p }}
        <input type="submit" value="提交"/>
    </form>
</body>

 呈现的效果如下图:

四、总结

  1. modelform的继承关系如下:UserInfoModelForm(自己创建的modelfrom类) -> ModelForm -> BaseModelForm -> BaseForm
  2. form 的继承如下:UserInfForm(自己创建的form类) -> Form -> BaseForm(is_valid()验证...)
  3. modelfrom是跟model紧紧的联系在一起的,所有的验证字段是直接冲model去拿的
  4. modelform和form老祖先都是一样的
  5. modelform适合小型项目,form验证大小项目都适合(推荐)

 

posted @ 2018-05-05 19:55  帅丶高高  阅读(240)  评论(0编辑  收藏  举报