如何在表单集模板代码中使用 ID 字段作为 url 参数(使用 django-extra-views)

How to utilise ID field as url parameter in formset template code (using django-extra-views)

我正在尝试采用 'extra-views' 作为处理表单集的高级方法,并希望在我的表单集模板的每一行上都有一个 link 以重定向到相关的基于对象的页面,为此我需要该对象的 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 模板指令,然后模板渲染失败。

非常感谢任何帮助。

我已经找到了答案,我认为它足够有用,可以分享:

由于 form.id 是一个隐藏字段,我的模板 url 需要包含 form.id.value 以便正确呈现和绑定到模板的 url 部分。

在我的 factory_kwargs 中使用 'extra': 1,我需要它来读取 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>