我认为这是一个足够普遍的情况,但似乎无法理解它。我已经使用django.forms.inlineformset_factory
创建了一个表单的formset,允许用户更改外键对象的各个方面,并且这些表单工作正常。
问题是我希望能够在formset中标记这些表单中的每一个(注意,不是每个表单中的字段,而是每个表单所基于的外键模型)。例如,如果我调整文档中的示例:
from django.db import models
from django.forms import inlineformset_factory
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
pages = models.IntegerField(default=0)
我创建了我的formset,允许人们更改Daffy Duck中任何一本书中的页数:
BookFormSet = inlineformset_factory(Author, Book, fields=('pages',))
author = Author.objects.get(name='Daffy Duck')
formset = BookFormSet(instance=author)
Say Daffy已经写了五本书,这些书都显示为整数条目,所有条目都标有" Pages",没有参考每本书所指的书。如何用表格的标题标记表格,以便他们知道他们正在改变哪一个?我已经尝试将字典传递到labels
函数的inlineformset_factory
字段,但它没有用。
答案 0 :(得分:2)
首先,请注意内联formset是一个围绕模型formset的小包装器,因此适用于后者的大多数适用于前者。模型formset是一种呈现一组表单的方法,每个表单都与模型的一个实例相关。所以你试图同时考虑几个抽象层次。
接下来,请参阅“Using a formset in views and templates”文档,该文档描述了编写自己的模板以呈现formset:
<form method="post" action="">
{{ formset.management_form }}
<table>
{% for form in formset %}
{{ form }}
{% endfor %}
</table>
</form>
因此,如果您想标记每个表单 - 记住每个表单本身都是ModelForm描述模型的一个实例 - 您可以访问{% for %}
块中的该表单:
<form method="post" action="">
{{ formset.management_form }}
<table>
{% for form in formset %}
<tr><th>{{ form.instance.foo_field }}</th></tr>
{{ form }}
{% endfor %}
</table>
</form>