Как использовать поле идентификатора в качестве параметра url в коде шаблона formset (используя django-extra-views) - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь принять «дополнительные представления» в качестве расширенного средства обработки наборов форм и хочу, чтобы в каждой строке шаблона моего набора форм была ссылка для перенаправления на соответствующую объектную страницу, для которой мне нужноначальное значение поля id этого объекта в качестве параметра url.

Вот представление:

from extra_views import ModelFormSetView
from .models import Course

class CourseFormSetView(ModelFormSetView):
    model = Course
    fields = ['id', 'ceName', 'ceExtName', 'ceDuration']
    template_name = 'course_view.html'
    factory_kwargs = {'extra': 1, 'max_num': None, 'can_order': False, 'can_delete': True}

Вот соответствующий раздел шаблона:

<form method="post">
    {% csrf_token %} 
    {% for form in formset %}
        <p>{{ form.ceName }} {{ form.ceExtName }} {{ form.DELETE }} <a href="{% url 'booksys:coursesetup_view' 1 %}" class="btn btn-info" role="button">Edit</a></p>
    {% endfor %}
    {{ formset.management_form }}
  <input type="submit" value="Submit" />
</form>

ДляПараметр url, я пробовал {{ form.fields.id.value }}, но он вообще не отображается в шаблоне, и {{ form.id }}, который визуализируется как скрытое поле, но не будет работать с директивой шаблона url, и тогда рендеринг шаблона завершится неудачей.

Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 20 октября 2019

Я разработал ответ на этот вопрос, и я думаю, что он достаточно полезен, чтобы поделиться:

Поскольку form.id является скрытым полем, URL моего шаблона должен включать form.id.value, чтобы правильно отображатьи привязать к части URL шаблона.

С 'extra': 1 в моем factory_kwargs, мне нужно было прочитать form.id.value|default_if_none:0, а затем обработать специальный случай нуля для kwargs ['pk'] всвязанное представление, так как в противном случае для новых строк набора форм это поле выглядит как None.

Соответствующая часть моего шаблона теперь выглядит так:

<form method="post">
    {% csrf_token %} 
    {% for form in formset %}
        <p>{{ form.ceName }} {{ form.ceExtName }} {{ form.DELETE }} <a href="{% url 'booksys:coursesetup_view' form.id.value|default_if_none:0 %}" class="btn btn-info" role="button">Edit</a></p>
    {% endfor %}
    {{ formset.management_form }}
  <input type="submit" value="Submit" />
</form>
...