Django之ModelForm组件

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 }}                  输入框的报错信息
原文地址:https://www.cnblogs.com/hesujian/p/11294670.html