关键词

详解Django的 get_form() 函数:获取视图所使用的表单实例

下面是关于 Django 的 get_form() 函数的详细讲解。

1. get_form() 函数的作用

get_form() 是 Django 中一个非常重要的函数,其作用是返回一个表单实例,在视图函数中常常用于修改或者添加数据时,使用不同类型的表单进行数据的处理。

2. get_form() 函数的使用方法

通常情况下,get_form() 函数需要在视图类中被重载,以便实现个性化的表单处理。下面给出一个简单的例子:

from django.views.generic import CreateView
from app01.models import TestModel
from app01.forms import TestForm

class TestCreateView(CreateView):
    model = TestModel
    form_class = TestForm

    def get_form(self):
        form = self.form_class(**self.get_form_kwargs())
        form.fields['name'].widget.attrs['class'] = 'form-control'
        return form

在上面的示例中,我们为 TestCreateView 类中的 get_form() 方法创建了一个重载。其中,在得到表单实例之后,我们通过 form.fields['name'].widget.attrs['class'] 来给表单中的 name 字段添加了一个 class 属性。

3. get_form() 函数的实例演示

下面给出两个实例:

实例一

在一个博客应用中,我们需要写一篇博客的视图函数。写博客分为创建和修改两个过程,我们需要分别定义两个视图类:

from django.views.generic import CreateView, UpdateView
from blog.models import Post
from blog.forms import PostForm

class PostCreateView(CreateView):
    model = Post
    form_class = PostForm

    def get_form(self):
        form = self.form_class(**self.get_form_kwargs())
        form.fields['title'].widget.attrs['class'] = 'form-control'
        form.fields['content'].widget.attrs['class'] = 'form-control'
        return form

class PostUpdateView(UpdateView):
    model = Post
    form_class = PostForm

    def get_form(self):
        form = self.form_class(**self.get_form_kwargs())
        form.fields['title'].widget.attrs['class'] = 'form-control'
        form.fields['content'].widget.attrs['class'] = 'form-control'
        return form

在上面的代码中,我们分别定义了 PostCreateViewPostUpdateView 两个视图类。这两个视图类都从 CreateViewUpdateView 类继承,同样都需要用到 get_form() 函数来处理表单。

实例二

另一个示例是更具体的,如果你想在表单中添加一个自定义的字段,则可以在视图中覆盖 get_form_class() 方法。如下:

from django.views.generic import CreateView
from django import forms
from app01.models import MyModel


class MyModelCreateView(CreateView):
    model = MyModel
    fields = ('name', 'age', 'sex')

    def get_form_class(self):
        class MyModelForm(forms.ModelForm):
            uii_token = forms.CharField(label='Auth Token', required=False, widget=forms.HiddenInput())

            class Meta:
                # see definition of django.forms.ModelForm class for more details
                model = MyModel
                fields = ('name', 'age', 'sex', )

        return MyModelForm

上述代码中,我们覆盖了get_form_class()方法,该方法内创建了一个扩展了自定义字段 uii_token 的 匿名表单 MyModelForm,然后返回了这个表单类。

总结

以上就是 get_form() 函数的作用和使用方法,可以用于视图函数中的具体实现,以达到个性化的表单处理需求。

本文链接:http://task.lmcjl.com/news/16264.html

展开阅读全文