2015-09-04 3 views
0

Я использую django-webtest для автоматизации функциональных тестов для приложения Django. Один из моих моделей ModelForms имеет несколько кнопок отправки. Шаблон, используя Джанго-хрустящие-формы, выглядит следующим образом:Как указать имя кнопки отправки формы формы формы через django-webtest

<form action="" method="post"> 
{% csrf_token %} 
<p> 
    {{ person_form|crispy }} 
    <br><br> 
    {{ admin_form|crispy }} 
</p> 
<button id="SaveButton" type="submit" name="save_data" class="btn btn-lg btn-primary">Save</button> 
<button id="VerifyButton" type="submit" name="verify_data" class="btn btn-lg btn-primary">Verify</button> 
</form> 

Когда я отправить форму вручную с веб-страницы, нажав на кнопку Сохранить, в request.POST, который передается в соответствующий зрения метод содержит тег «save_data», который я использую, чтобы решить, что делать в коде.

Однако, когда я создаю Джанго-WebTest TestCase делать то же самое, «save_data» тег отсутствует, даже если я указываю его в form.submit() следующим образом:

def test_schools_app_access_school_admin_record(self): 

    school_index = self.app.get(reverse('schools:school_index'), 
           user=self.school_admin) 
    assert self.school_name in school_index  
    school_page = school_index.click(self.school_name) 
    assert 'View School Administrator' in school_page 

    school_admin_page = school_page.click('View School Administrator') 

    person_form = school_admin_page.forms[1] 

    assert person_form['person-name'].value == self.school_admin_name 

    # TODO: Figure out how to pass name='save_data' while submitting 
    person_form['person-email'] = self.school_admin_email 
    response = person_form.submit(name='save_data', value='save') 

    # Verify that the field has been updated in the database 
    person = Person.objects.get(name=self.school_admin_name) 
    assert self.school_admin_email in person.email 

Как Я получаю django-webtest, чтобы включить имя кнопки отправки в request.POST?

Кроме того, поскольку у меня есть несколько форм на одной странице, в настоящее время я использую response.forms [1], чтобы выбрать интересующую форму. Но вместо этого я хотел бы использовать идентификатор формы. Я не мог найти в документации Django, как присвоить идентификатор формы (не идентификатор поля) ModelForm. Может ли кто-нибудь помочь мне в этом?

Я использую Django 1.7, django-webtest 1.7.8, WebTest 2.0.18 и django-crispy-forms 1.4.0.

ответ

0

Я понял, что сделал опечатку в своем фрагменте кода, из-за которого мой код не работал.

В этом фрагменте

person_form['person-email'] = self.school_admin_email 
response = person_form.submit(name='save_data', value='save') 

я должен иметь значение = 'Сохранить' вместо 'Сохранить'. С учетом этого ответа ответ содержит имя «save_data».

+0

Мой другой вопрос о том, как назначить идентификатор формы, остается без ответа, поэтому я выделил его на новый вопрос: http://stackoverflow.com/questions/32604184/how-to-assign-form-id-to -django-ModelForm – Tanuka

Смежные вопросы