我正在创建一个包含大量数据的页面。我需要一个部分,我可以在一个模板中多次使用相同的表单
所以我有一个类似的模型:
class base(models.Model):
name = models.CharField(max_length=50)
class other(models.Model):
base = models.ForeignKey(base)
然后在模板中我需要base
一次,然后我需要多个others
(动态)。截至目前,我做了类似这样的模板
<div id="div_id_name" class="form-group">
<label for="id_name" class="control-label requiredField">
Name
</label>
<div class="controls ">
<input class="numberinput form-control" id="id_name" name="name" type="number" />
</div>
</div>
唯一的问题是,使用多个相同的表单,字段的名称不是唯一的,所以我不知道每个单独的如何相同。有什么帮助吗?
答案 0 :(得分:6)
如果您需要使用相同的表单时间,可以通过在创建时传递prefix='something'
来添加前缀。前缀将被添加到生成的字段名称之前。
但在你的情况下,你真正拥有一个设置的表格。可能用于编辑类似对象的集合。 Django为此提供了modelformset_factory
函数,您可以这样使用它:
from django.forms import modelformset_factory
OtherFormSet = modelformset_factory(Other)
# Creating an empty formset
formset = OtherFormSet()
# Creating a formset from a queryset
formset = OtherFormSet(queryset=Other.objects.filter(something='foobar'))
# Validating and saving
formset = OtherFormSet(request.POST)
if formset.is_valid():
formset.save()
请参阅此处的完整文档: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#model-formsets
现在,根据您的问题,我相信您实际上正在编辑一个Base实例,以及一组链接到该Base实例的其他实例,对吧?这是一个非常常见的情况,Django使用内联formset为它提供直接支持。
from django.forms import inlineformset_factory
InlineOtherFormSet = inlineformset_factory(Base, Other)
formset = InlineOtherFormSet(instance=Base.objects.get(pk=1))
同样,文档很清楚所以更多,我会让你读它: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets
答案 1 :(得分:0)
您可以通过执行以下操作为表单添加前缀:
mother = PersonForm(prefix="mother")
father = PersonForm(prefix="father")
我希望这可以进一步帮助你!
来源:https://docs.djangoproject.com/en/dev/ref/forms/api/#prefixes-for-forms