Django-контакт-формы: как создать подкласс и предоставить «начальный» параметр? - PullRequest
0 голосов
/ 15 февраля 2010

У меня есть форма 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 голосов
/ 15 февраля 2010

Вы не предоставляете полную трассировку ни в одном из ваших примеров. Если бы вы имели, я подозреваю, что мы увидели бы, что не ваш код выдает ошибку 'scraperContactForm' object is not callable, а последующий вызов основного contact_form представления.

Это потому, что это представление явно ожидает класс формы , как указано в параметрах ключевого слова. Тем не менее, вы уже создаете экземпляр формы, вызывая ее в первой строке, так что вы фактически передаете экземпляр формы , который не вызывается.

Я бы предложил, чтобы, если вы хотите указать начальное значение для поля, вы делаете это в определении вашей подклассовой формы:

class scraperContactForm(ContactForm):
    title = django.forms.CharField(initial='hello world')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...