2015-07-15 3 views
2

У меня есть много «опросов» в моем webapp, в котором у меня есть все, что отображается на одной странице, но не может понять, как создать кнопку отправки (голосования) для всех формы. На данный момент у каждого из них есть свои собственные кнопки для голосования по каждому вопросу, но я хотел бы, чтобы один из них представил все.Django несколько форм с одной кнопкой отправки

Мой HTML-код для этого шаблона выглядит следующим образом:

{% if latest_question_list %} 
    {% for question in latest_question_list %} 
    <h2>{{ question.question.text }}</h2> 
    <form action="{% url 'polls:vote' question.id %}" method="post"> 
    {% csrf_token %} 
    {% for choice in question.choice_set.all %} 

     <input type="radio" name="choice" id="choice{{ for loop.counter }}" value="{{ choice.id }}" /> 
     <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> 

    {% endfor %} 

    <input type="radio" name="choice" value="">Other: <input type="text" /> 
    <br><input type="submit" value="Vote" /></br> 
    </form> 
    {% endfor %} 

{% else %} 
    <p>No polls are available.</p> 
{% endif %} 

Есть простой способ сделать это? Я ценю любую помощь! Благодарю.

ответ

2

See - django submit two different forms with one submit button

класс формы Джанго, при подаче данных из запроса, смотрит на POST или GET, чтобы найти значения от элемента ид. Все поля в форме должны иметь уникальный идентификатор или использовать Django form's prefix keyword при построении формы в вашем представлении.

Вкратце - поместите все элементы своей формы в один тег html, используйте ключевое слово префикса (с уникальными префиксами для каждой формы Django, в любое время, когда форма построена в представлении, это изменит входной/select/radiobox атрибут id элементов) и оттуда. Поставьте GET или POST для каждого экземпляра формы и
ваше добро пожаловать.

Однако приведенный выше код показывает, что вы вручную заполняете идентификатор каждого поля. Скорее, почему бы не передать каждую форму шаблону, например, {{form_name.as_p}}? Если у вас нет веских оснований для этого, вы, вероятно, создаете головную боль для себя.