Django中modelform组件实例用法总结
什么是ModelForm
Django中的ModelForm是一个用于创建表单的工具,它可以快速方便地生成表单,并且能够自动地处理表单数据的校验和处理,相较于手写表单处理的方法,使用ModelForm可以减轻开发量和提高开发效率。
ModelForm可以从一个Database Model自动生成简单的表单,而不需要开发人员手动定义表单字段等元素,其生成的表单也默认包含了Model中定义的所有字段信息。另外,ModelForm还会为这些字段自动创建前端HTML控件,并根据Model中定义的校验条件和参数,自动生成相应的JavaScript校验函数等细节操作,简化了开发人员对于表单的处理和校验等工作。
ModelForm的用法
ModelForm的用法非常简单,只需要首先定义一个表单Model,然后使用ModelForm来派生出一个表单类,在视图函数中实例化该表单类即可。
定义Model
定义Model的过程与Django中定义一般的Model相同,需要定义表的字段,数据类型、是否为空、默认值、max_length等等。
from django.db import models
class Book(models.Model):
title = models.CharField('书名',max_length=50)
author = models.CharField('作者',max_length=50)
publisher = models.CharField('出版社',max_length=50)
pub_date = models.DateField('出版日期')
定义ModelForm
定义ModelForm的过程需要引入以下的模块:
from django import forms
from .models import Book
接着,基于上面所定义的Book模型,我们可以定义一个对应的ModelForm表单类,如下所示:
class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = ('title', 'author', 'publisher', 'pub_date')
在上述代码中,首先需要导入forms和Book模型类,然后实例化一个ModelForm,将它的model属性指向Book,将它的fields属性设置为列表形式的包含4个字段的元素。这就是定义表单的过程,通过一个ModelForm对象,就能够获得一个与Model对应的表单。这里我们定义一个BookForm类来表示这个表单。
在视图函数中调用ModelForm
在视图函数中调用ModelForm也非常简单,只需要将定义好的Form类实例化即可:
from django.shortcuts import render
from .models import Book
from .forms import BookForm
def book_form(request):
if request.method == 'POST':
form = BookForm(request.POST)
if form.is_valid():
book = form.save()
return redirect('book_detail', pk=book.pk)
else:
form = BookForm()
return render(request, 'book/form.html', {'form': form})
在上述代码中,如果接收到的请求是POST方式,实例化BookForm表单,并验证表单是否有效,如果验证通过就将表单数据写入数据库,并重定向到主页,否则保留并返回表单以供修改。
示例说明
这里我将提供两种常见的使用场景进行说明:
使用ModelForm添加数据
# 在视图函数中添加如下代码
def add(request):
if request.method == 'GET':
form = BookForm()
return render(request, 'add.html', {'form': form})
elif request.method == 'POST':
form = BookForm(request.POST)
if form.is_valid():
form.save()
return redirect('book_list')
else:
return render(request, 'add.html', {'form': form})
在GET请求下,我们通过BookForm实例化一个表单对象并返回到template中。在POST请求下,我们通过BookForm(request.POST)实例化一个表单对象并从request中取出表单数据,接着判断表单是否合法,如果合法则保存表单数据并重定向到之前设置的book_list中,否则重新渲染这个页面以便用户修改并重新提交数据。
使用ModelForm更新数据
# 在视图函数中添加如下代码
def update(request, pk):
book = get_object_or_404(Book, pk=pk)
if request.method == 'GET':
form = BookForm(instance=book)
return render(request, 'update.html', {'form': form})
elif request.method == 'POST':
form = BookForm(request.POST, instance=book)
if form.is_valid():
form.save()
return redirect('book_list')
else:
return render(request, 'update.html', {'form': form})
在这个模板中,我们与之前的表单处理过程类似,在GET请求下,我们首先获取到对应的book对象,并将其传入BookForm中,再将表单返回到template中以便于用户修改表单数据。在POST请求下,我们也是将这个book对象传入BookForm中,然后从request中取出表单数据,接着判断表单数据是否合法,如果合法则对book对象进行更新,最后重新定向到之前设置的book_list中,否则重新渲染这个页面以便于用户修改并重新提交数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django中modelform组件实例用法总结 - Python技术站