Как создать и отправить несколько экземпляров формы на одной странице? - PullRequest
0 голосов
/ 05 июня 2019

Мне нужно 3 экземпляра формы ввода URL, чтобы я мог отправить до 3 разных URL.

forms.py

class AdditemForm(forms.Form):
    url = forms.URLField(
        label='Add Item',
        widget=forms.URLInput(
            attrs={
                "class": "form-control",
                }))

view.py

def ItemDetail(request, pk):
    listitem = comparelist.objects.get(id=pk)
    if request.method == 'POST':
        form = AdditemForm(request.POST)
        if form.is_valid():
            url = form.cleaned_data.get("url")                
            items.objects.create(
                    link=url,
                    name=product_name,
                    price=price,
                    store=store,
                )
            return HttpResponseRedirect(request.path_info)
    else:
        form = AdditemForm()
    template = 'itemdetail.html'
    context = {
        "comparelist": listitem,
        "form": form,
    }
    return render(request, template, context)

Я использую фрагмент формы, который я нашел в руководстве:

{% load widget_tweaks %}
<form method="post" class="form">
            {% csrf_token %}
            {% for hidden_field in form.hidden_fields %}
                  {{ hidden_field }}
                {% endfor %}

                {% if form.non_field_errors %}
                  <div class="alert alert-danger" role="alert">
                    {% for error in form.non_field_errors %}
                      {{ error }}
                    {% endfor %}
                  </div>
                {% endif %}

                {% for field in form.visible_fields %}
                  <div class="form-group">
                    {{ field.label_tag }}

                    {% if form.is_bound %}
                      {% if field.errors %}
                        {% render_field field class="form-control is-invalid" %}
                        {% for error in field.errors %}
                          <div class="invalid-feedback">
                            {{ error }}
                          </div>
                        {% endfor %}
                      {% else %}
                        {% render_field field class="form-control is-valid" %}
                      {% endif %}
                    {% else %}
                      {% render_field field class="form-control" %}
                    {% endif %}

                    {% if field.help_text %}
                      <small class="form-text text-muted">{{ field.help_text }}</small>
                    {% endif %}
                  </div>
                {% endfor %}
            <button type="submit" class="btn btn-primary">Submit</button>
        </form>

Итак, как мне получить 3 из этих форм на моей странице и иметь возможность отправлять 3 разных URL? Я могу думать только о том, чтобы создать 3 разных класса форм и вставить фрагмент кода 3 раза в шаблон. Но это похоже на ненужное повторение.

1 Ответ

2 голосов
/ 05 июня 2019

Зачем "создавать 3 разные формы классов " ???Вы можете просто создать три экземпляра одной формы.

вставить фрагмент формы 3 раза в шаблон

Вы когда-нибудь слышали о списках и циклах?Вы можете поместить три (или более) формы в список и зациклить его.

НО это на самом деле не лучшее решение - У Django есть Formsets для этого варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...