Django:Form的动态初始值失败

时间:2015-02-05 18:20:13

标签: python django forms

我正在使用Django django.forms.Formdjango.views.generic.edit.FormView来呈现HTML模板。

我想为表单中的某些字段添加默认值,但遇到问题:

Error:

这是我的代码:

from django.views.generic.base import TemplateView
from django.views.generic.edit import FormView

class SignForm(forms.Form):
    greeting_message = forms.CharField(
        label='Greeting message', 
        widget=forms.Textarea, 
        required=True, 
        max_length=100,
    )
    book_name = forms.CharField(
        label='Guestbook name', 
        max_length=10, 
        required=True,
    ) 

class SignView(FormView):
    """Assign initial value for field 'book_name'."""

    form_class = SignForm(
        initial={
            'book_name': 'aaaa'
        }
    )

    def form_valid(self, form):
        ...

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您将实例归因于form_class而不是属性名称所暗示的表单类。 SignForm是类,SignForm(*args)是一个实例。

您应该覆盖视图中的get_initial()方法:

def get_initial():
    return {'book_name': 'aaaa'}

答案 1 :(得分:2)

与上述评论一样,您必须将form_class仅分配给班级。通过使用括号和参数执行的操作,您将实例化一个对象,这就是您有异常的原因。

相反,要设置初始数据,请定义get_initial函数,如下所示:

def get_initial(self):
    initial = super(SignView, self).get_initial()
    initial['book_name'] = 'aaaa'
    return initial

Docs are available here