记录——django2.0后forms.Modelform的坑

最近再写一个bug管理平台中,使用了最新的djagno5.0的版本。
但是在使用过程中遇到了一些问题,在使用forms.Modelform去创建一个表单时,在1.x的版本中,实例化这个表单不传值是没有问题的如下图:
在这里插入图片描述
在这里插入图片描述
这段代码在1.x运行是没有问题的。但是在5.0版本运行时,出现了问题,在访问路由时,提示了typeerror,提示缺少了一个reuqest传参。原来是因为在django5.0中,实例化表单类的时候必须传入参数,如果因为没有提交任何参数,可以上传一个空字典
在这里插入图片描述
输入一个空字典后,终于可以正常访问页面了。
在这里插入图片描述

Django框架中,`forms.Form`和`forms.ModelForm`都是用于处理表单的重要组件,但它们存在一些区别: ### 定义方式 - **`forms.Form`**:需要手动定义表单的每个字段,包括字段类型、验证规则等。例如,定义一个留言板表单类,需要明确指定标题、内容、邮箱和回复等字段的属性: ```python from django import forms class MessageBoardForm(forms.Form): title = forms.CharField(max_length=3, label='标题', min_length=2, error_messages={"min_length": '标题字符段不符合要求!'}) content = forms.CharField(widget=forms.Textarea, label='内容', error_messages={"required": 'content字段必须填写!'}) email = forms.EmailField(label='邮箱') reply = forms.BooleanField(required=False, label='回复') ``` - **`forms.ModelForm`**:基于Django的模型(Model)来定义表单,通过`Meta`类指定关联的模型和需要包含的字段。例如,关联`models.Level`模型并指定`title`和`percent`字段: ```python from django import forms import models class LevelModelForm(forms.ModelForm): class Meta: model = models.Level fields = ['title', 'percent'] ``` ### 数据交互 - **`forms.Form`**:通常用于处理与模型无关的数据,或者需要自定义数据处理逻辑的场景。它不直接与数据库模型交互,需要手动处理表单数据的保存和更新操作。 - **`forms.ModelForm`**:与Django的模型系统无缝集成,能够自动处理表单数据与数据库模型之间的交互。当表单数据验证通过后,可以直接调用`form.save()`方法将数据保存到数据库中,减少了开发人员的工作量,遵循了DRY(Don’t Repeat Yourself)原则,提高了开发效率[^3]。 ### 数据验证 - **`forms.Form`**:验证规则完全由开发人员手动定义,每个字段的验证规则需要在表单类中明确指定。 - **`forms.ModelForm`**:除了可以手动定义验证规则外,还会自动继承关联模型的字段验证规则。例如,如果模型中的某个字段设置为`unique=True`,那么在表单验证时也会检查该字段的唯一性。 ### 适用场景 - **`forms.Form`**:适用于处理非数据库相关的数据,或者需要自定义复杂数据处理逻辑的表单,如登录表单、搜索表单等。 - **`forms.ModelForm`**:适用于对单表进行增删改查操作的表单,尤其是在需要快速实现与数据库模型对应的表单时,使用`ModelForm`可以大大简化开发流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值