首页 文章

如何删除Django内联formset中“额外”表单上的“删除”复选框

提问于
浏览
2

我在Django中使用内联表单集,并为每个显示一个“额外”表单的项目添加另一个对象 .

现有对象的表单具有“删除”复选框,用于删除该对象,这是有意义的 .

但是“额外”形式也有这些“删除”复选框......这没有任何意义,因为没有什么可以删除 . Django管理员中的内联表单不显示“额外”表单的这些“删除”复选框 .

如何删除“额外”内联表单上的这些复选框?

我的模板的内联formset部分是这样的(简化版,完整版here):

{% for bookimage_form in form.forms %}
  {% for hidden_field in bookimage_form.hidden_fields %}
    {{ hidden_field.errors }}
  {% endfor %}

  {{ bookimage_form.as_table }}
{% endfor %}

这是“删除”复选框,似乎是多余的:

example screenshot

3 回答

  • 0

    您可以使用 InlineModelAdmin 类的can_delete设置( TabularInline 继承自 InlineModelAdmin ):

    class BookImageInline(admin.TabularInline):
        model = BookImage
        extra = 1
        can_delete = False
    
  • 0

    当你循环遍历表单时,这是一种在模板中到达的方法:

    {% if bookimage_form.instance.pk %}
      <small><b>{{ bookimage_form.DELETE.label_tag }}</b></small><br>
      {{ bookimage_form.DELETE}}
    {% else %}
    {% endif %}
    

    你将无法使用't think, though. You'方法,我必须在表格中表达其他所有字段 .

    在初始化表单之后,在进入上下文之前,您可以尝试另一件事:

    for f in form.forms: 
        if not f.instance.pk: 
            f.fields['DELETE'] = None
    

    不知道表格中会出现这种情况,但你可能会想到这个想法 .

  • 2

    我的建议是在嵌套for循环中渲染模板并添加:

    {% if forloop.parentloop.last and forloop.last%}
         not render form filds
     {% else %}
         render field
     {% endif %}
    

相关问题