Django-contact-forms:如何子类化并提供'initial'参数?

时间:2010-02-15 17:03:01

标签: django django-forms

我有一个Django表单,它是django-contact-form应用程序的子类。我想为表单提供一个初始参数(根据上下文的不同而不同)。

此代码返回联系表单,但显然不提供初始参数,因此我需要扩展它:

def contact_form(request):
 scraper_form = scraperContactForm
 return contact_views.contact_form(request=request, form_class=scraper_form)

这种提供初始参数的尝试失败:

def contact_form(request):
 scraper_form = scraperContactForm(initial={'title' : 'hello world'})
 return contact_views.contact_form(request=request, form_class=scraper_form)
TypeError at /contact/
Keyword argument 'request' must be supplied

因此,我试图提供一个请求参数,但奇怪的是,通过说表单对象不可调用而失败:

def contact_form(request):
 scraper_form = scraperContactForm(request=request, initial={'title' : 'hello world'})
 # supply initial subject_dropdown field, if there's anything in the subject_type
 return contact_views.contact_form(request=request, form_class=scraper_form)
TypeError at /contact/
'scraperContactForm' object is not callable

无论我如何尝试提供请求参数,我都会继续'scraperContactForm' object is not callable

仅供参考,这是我的子类表格的代码:

class scraperContactForm(ContactForm):
  subject_dropdown = django.forms.ChoiceField(label="Subject type", choices=(('suggestion', 'Suggestion for improvement'), ('bug', 'Report a bug'), ('other', 'Other')))
  title = django.forms.CharField(widget=django.forms.TextInput(), label=u'Subject')
  recipient_list = [settings.FEEDBACK_EMAIL]

任何人都可以建议出现问题吗?

1 个答案:

答案 0 :(得分:0)

您不会在任何示例中提供完整的回溯。如果你有,我怀疑我们会发现你的代码不是'scraperContactForm' object is not callable错误,而是随后调用主contact_form视图。

这是因为该视图显然需要表单类,如关键字参数所示。但是,您已经通过在第一行中调用它来实例化表单,因此您实际上正在传递一个表单实例,这是不可调用的。

我建议如果你想为字段提供一个初始值,你可以用你的子类形式定义:

class scraperContactForm(ContactForm):
    title = django.forms.CharField(initial='hello world')