django在同一模板上形成两次

时间:2014-12-21 00:24:49

标签: python django

我正在创建一个包含大量数据的页面。我需要一个部分,我可以在一个模板中多次使用相同的表单

所以我有一个类似的模型:

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>

唯一的问题是,使用多个相同的表单,字段的名称不是唯一的,所以我不知道每个单独的如何相同。有什么帮助吗?

2 个答案:

答案 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