模型表单指绑定到模型的表单。自定义的模型表单需扩展django.forms模块提供的ModelForm类。
模型表单基本操作包括定义模型、定义模型表单以及使用模型表单为数据库添加和修改数据。
模型代码如下。
models.py
from django.db import models
class person(models.Model):
name=models.CharField(max_length=8)
age=models.SmallIntegerField()
用于模型表单的模型与普通模型并没有任何区别。
模型表单代码如下。
views.py
from django.forms import ModelForm
from models import person
……
class personForm(ModelForm):
class Meta:
model = person
fields = ['name', 'age']
模型表单有两个特点:
必须继承django.forms.ModelForm类。
提供子类Meta。在Meta的model字段中绑定模型,在fields字段中设置在表单中使用的模型字段。
可以使用特殊值“all”表示使用模型全部字段,示例代码如下。
fields = 'all'
也可使用exclude属性来排除不使用的字段,示例代码如下。
exclude = ['age']
首先使用数据作为参数来创建模型表单,再调用表单的save()方法将数据写入数据库,示例代码如下。
from chapter7.models import person
from chapter7.views import personForm
one=personForm({'name':'张三','age':25}) #用初始化数据,创建模型表单对象
one.save() #保存表单
d=person.objects.all()[0] #获取数据库中的第1条记录,
d.name,d.age #查看数据
('张三', 25)
调用save()方法时,会将数据写入数据库,同时返回包含数据的模型对象。
在创建模型表单对象时,可使用instance参数指定模型对象,save()方法使用模型表单的数据修改模型对象,从而修改其关联的数据库记录,示例代码如下。
p=person.objects.get(id=1) #获取模型对象
p.name,p.age #查看数据
('张三', 25)
one=personForm({'name':'李四','age':30},instance=p) #创建关联模型对象的模型表单
one.save() #保存表单
p=person.objects.get(id=1)
p.name,p.age #通过模型对象查看修改后的数据
('李四', 30)