modelform介绍
modelform与forms组件类似,forms组件与对应的表模型(没有关系)
modelform相当于在其基础上继续封装,使得modelform与model具有对应的关系
创建modelform
from app01 import models # 导入modelform这个类 from django.forms import ModelForm # 自己创建一个类继承这个类 class BookList(ModelForm): # 创建Meta类,在Meta类中可以定义属性 class Meta: # 对应的表模型 model = models.Book # fields 用于控制展示的字段 __all__代表全部, 如果想展示多个,就放在列表中 fields = '__all__' # fields = ['title', 'price'] # exclude用于控制排除的字段 exclude = ['title'] # error_message用于展示报错信息时不同字段对应不同的信息 error_messages = { 'title': { 'required': '标题不能为空', 'invalid': '格式错误' }, # 'price'.... 每个字段需要添加错误信息都可以在这个地方添加 } # 当我们想要给对应的输入框加入属性时,widgets可以帮我们实现 # 首先要从forms中导入widgets,这里因为和下面的关键字名字一样, 所以需要起别名 from django.forms import widgets as wid widgets = { 'title': wid.TextInput(attrs={'class':'form-control'}), 'price': wid.TextInput(attrs={'class':'form-control'}) } # labels 自定义在前端显示的名字,如果我们不指定,就会自动取字段中查找设置的verbose_name的值 # 如果我们没有设置verbose_name,就会使用字段名对应的小写 labels = { 'title': '标题', 'price': '价格' }
在url对应的视图函数中实例化这个类传到前端
def index(request): book_obj = BookList() return render(request, 'xxx.html', locals())
在前端中用法基本与forms组件一致
<label for="{{ foo.auto_id }}"> 获得输入框对应的id值 {{ foo.label }} 获得输入框对应的文本名 </label> 对应的输入框 {{ foo }} <span> {{ foo.errors.0 }} 输入框的报错信息