📜  Django ModelForms(1)

📅  最后修改于: 2023-12-03 15:14:43.312000             🧑  作者: Mango

Django ModelForms

Django ModelForms是一个方便快捷的方法,用于把数据从数据模型及其实例中转换到HTML表单。本文将介绍Django ModelForms的基本用法及其优点。

用法

首先,我们需要定义我们要使用的模型:

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    age = models.IntegerField()

然后,我们可以定义一个表单类,将上述模型转换为一个表单类:

from django import forms
from .models import Person

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = ['first_name', 'last_name', 'age']

在上面的代码中,我们定义了一个叫做PersonForm的表单类,并将其与Person模型关联。然后我们定义了一个Meta类,将fields属性设置为Person模型的三个字段,即first_name、last_name、age。

现在,我们可以在视图函数中使用这个表单类来渲染HTML表单:

from django.shortcuts import render
from .forms import PersonForm

def add_person(request):
    form = PersonForm()
    return render(request, 'add_person.html', {'form': form})

在上面的代码中,我们从.forms包中导入了PersonForm类,并实例化了一个空表单对象。然后将表单对象作为变量传递给模板文件add_person.html进行处理。

在模板文件中,我们可以使用Django内置的表单标签和渲染方法来自动生成表单的HTML代码:

{% extends "base.html" %}

{% block content %}
  <form method="post">{% csrf_token %}
    {{ form.as_p }}
    <button type="submit">保存</button>
  </form>
{% endblock %}

在上面的代码中,我们使用表单标签{{ form.as_p }}将表单渲染为一个p标签列表,其中包含了所有表单字段和相应的表单控件。

最后,我们需要在视图中处理表单的提交:

from django.shortcuts import render, redirect
from .forms import PersonForm

def add_person(request):
    if request.method == 'POST':
        form = PersonForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('person_list')
    else:
        form = PersonForm()
    return render(request, 'add_person.html', {'form': form})

如果请求的方法是POST,我们将把包含表单数据的request.POST对象传递给表单而不是使用空表单对象。然后我们检查表单数据是否有效。如果表单有效,则将相应的数据库条目保存到数据库中,并重定向到一个名为person_list的视图中。否则,我们将显示一个错误消息和表单。

优点

Django ModelForms的主要优点是它们非常容易使用。通过与模型关联的方式,ModelForms会自动处理表单中的大量代码,使代码更加简洁易于维护。此外,ModelForms还可以自动为表单字段设置标签标识符和HTML属性,从而减少了编写HTML的工作量。

最后,与手工编写的表单相比,使用ModelForms还可以提高代码的可重用性。由于表单使用了与模型之间的映射关系,因此可以更轻松地将表单用于不同的视图或项目中。

结论

Django ModelForms可以帮助我们更快地创建和处理表单,同时减少代码量和提高代码的可维护性。尽管它可能对较小的项目来说有些过于复杂,但是对于中大型项目来说,使用ModelForms是一种非常优秀和高效的方式。