Python Django:表单失败的动态初始值

Python Django:表单失败的动态初始值,python,django,forms,Python,Django,Forms,我正在使用DjangoDjango.forms.Form和Django.views.generic.edit.FormView来呈现HTML模板 我想为表单中的某些字段添加默认值,但遇到了一个问题: 这是我的密码: from django.views.generic.base import TemplateView from django.views.generic.edit import FormView class SignForm(forms.Form): greeting_m

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

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

这是我的密码:

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):
        ...


有人能帮我吗?

您将实例属性化为
form\u class
,而不是属性名称所暗示的表单类
SignForm
是类,
SignForm(*args)
是实例

您应该覆盖视图中的
get\u initial()
方法:

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

正如上面的评论所说,您必须将
form\u class
仅分配给该类。通过使用括号和参数,您正在实例化一个对象,这就是出现异常的原因

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

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

form\u class=SignForm(…)
正在初始化表单,它应该只是定义要使用的表单。尝试将其更改为
form\u class=SignForm
,至于设置初始值,请查看以下问题: