Django之Model、Form、ModelForm区别

本文介绍了Django中的Model、Form和ModelForm的区别和用法。Model主要用于数据库操作,具备基础的数据验证;Form则专注于数据验证,提供强大的验证功能;ModelForm结合两者,提供了便捷的数据验证和数据库操作。文中详细讲解了ModelForm的使用,包括如何创建、修改以及Meta选项的设置,并探讨了动态生成ModelForm表单的方法。
摘要由CSDN通过智能技术生成

本节内容:

1:Model               https://www.cnblogs.com/shuai1991/p/10844662.html

2:Form                https://www.cnblogs.com/shuai1991/p/10763508.html        https://www.cnblogs.com/shuai1991/p/10766649.html

3:ModelForm       https://www.cnblogs.com/shuai1991/p/10852254.html

 

Model ==> 强大的数据库操作,弱小的数据验证。

Form ==>强大的数据验证

ModelForm ===>二者结合,强大的数据验证,适中的数据库操作。在ModelForm是能够封装一个model对象。

 

1:Model

对于Model来说,他的验证是需要自己去创建一个model对象,然后去进行判断

model:
    针对单一字段 :full_clean 
    针对多个的字段: clean
    
    full_clean -- >字段正则判定 -- >clean方法(钩子)
    他是没有最终产物

views:

def fm(request):
    obj = models.News(title='root')
    ##full_clean就进行了验证,如果要是有errors的话,就直接报错,所以在进行验证的时候,我们要自己做try判断
    obj.full_clean()  ##进行model的验证。里面的def clean 方法
    obj.save()

    ##报错 django.core.exceptions.ValidationError: {'__all__': ['title不能是root']}
    return render(request,"form.html",locals())

models:

from django.db import models
from  django.core.exceptions import ValidationError


class News(models.Model):
    title = models.CharField(max_length=32)

    ##验证错误会输出到errors中去
    def clean(self):
        if self.title == "root":
            raise ValidationError("title不能是root")

model的源码分析:

def full_clean(self, exclude=None, validate_unique=True):
        """
        Call clean_fields(), clean(), and validate_unique() on the model.
        Raise a ValidationError for any errors that occur.
        """
        errors = {}
        if exclude is None:
            exclude = []
        else:
            exclude = list(exclude)

        try:
            self.clean_fields(exclude=exclude)  ####执行单个字段的验证
        except ValidationError as e:
            errors = e.update_error_dict(errors)

        # Form.clean() is run even if other validation fails, so do the
        # same with Model.clean() for consistency.
        try:
            self.clean()   #
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值