python Django之ModelForm组件

ModelForm的定义

通常在Django项目中,我们会编写的大部分都是与Django 相关的各种各样的表单,在这种情况下,在form表单中定义字段将是冗余的,因为我们已经在app文件夹下的models.py文件中定义了那些字段。

基于这个原因,Django 提供一个让我们更加方便快捷的组件,这就是ModelForm,ModelForm是form与model的终极结合,会根据你model中的字段转换成对应的form字段,并且生成标签等操作。

ModelForm类的写法

from django.forms import ModelForm
from app01 import models as m
class BookForm(ModelForm):
    class Meta:
        model=m.Books #对应model中的类
        fields="__all__"
        label={'name':'书名','price':'价格','publish':'出版社'}
        error_messages={'name':{'required':'名字不能为空'},'price':{'required':'价格不能为空'}}

Meta下常用参数:

model = m.Book  # 对应的Model中的类
fields = "__all__"  # 如果是__all__,就是表示列出所有的字段
exclude = ['name', ] # 排除name字段,值为一个列表可填多个
labels = {'name':'书名',} # 提示信息,值为一个字典
help_texts = None  # 自定义帮助提示信息
widgets={'password':w.PasswordInput(attrs={'class':'c1'})} # 自定义插件
error_messages={'name':{'required':'名字不能为空'},'price':{'required':'价格不能为空'}} #自定义错误信息

自定义钩子

from django.core.exceptions import ValidationError
class BookForm(ModelForm):
    class Meta:
        model=m.Books #对应model中的类
        fields="__all__"
        label={'name':'书名','price':'价格','publish':'出版社'}
        error_messages={'name':{'required':'名字不能为空'},'price':{'required':'价格不能为空'}}
	def clean_name(self): #局部钩子,和form相似
		if 验证条件通过:
			return slef.clean_data
		else:
			 raise ValidationError('错误信息')
	def clean(self): #全局钩子
		if 验证条件通过:
			return slef.clean_data
		else:
			 raise ValidationError('错误信息')

save()方法

def xo(request):
    if request.method=="GET":
        m=BookForm()
        return render(request,'model.html',{'m':m})
    elif request.method=="POST":
        m=BookForm(request.POST)
        if m.is_valid():
            m.save() #保存单表信息
        return render(request,'model.html',{'m':m}
#########################################
# 默认保存多对多
      obj = form.save(commit=True)
# 不做任何操作,内部定义 save_m2m(用于保存多对多)
      obj = form.save(commit=False)
      obj.save()      # 保存单表信息
      obj.save_m2m()  # 保存关联多对多信息

编辑数据

obj=model.Book.object.get(id=1)
model_form=BookForm(instance=obj)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值