Python django表单在同一模板上两次
我正在创建一个包含大量数据输入的页面。我需要一个部分,我可以有相同的形式多次在一个模板 所以我有一个模型,比如:Python django表单在同一模板上两次,python,django,Python,Django,我正在创建一个包含大量数据输入的页面。我需要一个部分,我可以有相同的形式多次在一个模板 所以我有一个模型,比如: class base(models.Model): name = models.CharField(max_length=50) class other(models.Model): base = models.ForeignKey(base) 然后在模板中,我需要base一次,然后我需要多个其他(动态)。现在,我做的模板是这样的 <div id="div_id_na
class base(models.Model):
name = models.CharField(max_length=50)
class other(models.Model):
base = models.ForeignKey(base)
然后在模板中,我需要base
一次,然后我需要多个其他
(动态)。现在,我做的模板是这样的
<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>
名称
唯一的问题是,使用多个相同的表单时,字段的名称不是唯一的,所以我不知道如何将每个字段分开。有什么帮助吗?您可以通过以下操作向表单添加前缀:
mother = PersonForm(prefix="mother")
father = PersonForm(prefix="father")
我希望这能进一步帮助你
来源:您可以通过以下操作向表单添加前缀:
mother = PersonForm(prefix="mother")
father = PersonForm(prefix="father")
我希望这能进一步帮助你
来源:如果您需要在已知的时间内拥有相同的表单,您可以让它添加前缀,方法是在创建表单时传递它
prefix='something'
。前缀将在生成的字段名之前
但在你的情况下,你真正拥有的是一套形式。可能用于编辑类似对象的集合。Django为此提供了modelformset\u 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()
请参阅此处的完整文档:
现在,根据你的问题,我相信你实际上正在编辑一个基本实例,以及一组链接到该基本实例的其他实例,对吗?这是一种非常常见的情况,Django通过内嵌表单集提供了对它的直接支持
from django.forms import inlineformset_factory
InlineOtherFormSet = inlineformset_factory(Base, Other)
formset = InlineOtherFormSet(instance=Base.objects.get(pk=1))
同样,文档非常清晰,因此,要了解更多信息,我将让您阅读:
如果您需要在已知的时间内拥有相同的表单,您可以让它添加前缀,方法是在创建表单时传递
prefix='something'
。前缀将在生成的字段名之前
但在你的情况下,你真正拥有的是一套形式。可能用于编辑类似对象的集合。Django为此提供了modelformset\u 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()
请参阅此处的完整文档:
现在,根据你的问题,我相信你实际上正在编辑一个基本实例,以及一组链接到该基本实例的其他实例,对吗?这是一种非常常见的情况,Django通过内嵌表单集提供了对它的直接支持
from django.forms import inlineformset_factory
InlineOtherFormSet = inlineformset_factory(Base, Other)
formset = InlineOtherFormSet(instance=Base.objects.get(pk=1))
同样,文档非常清晰,因此,要了解更多信息,我将让您阅读:
这是一个非常完整的回答。我真的很感激这一点,我已经处理了一段时间,我发现关于
modelformset\u factory
的第一部分对于显示初始空模板很有用。如何动态添加另一个表单?例如,当我查看页面源代码时,初始表单的iddiv\u id\u form-0-
为HTML格式。我如何动态添加div\u id\u form-1-
,div\u id\u form-2-
,等等。基本上,您拥有正确的模式。将extra=1
传递到表单集工厂,它将输出额外的空表单。使用CSS隐藏它,然后在Javascript中可以克隆它,并在每次需要新表单时显示克隆。不过有两个问题:1)javascript必须更新每个克隆的ID;2)表单集使用隐藏的管理表单来跟踪页面上有多少表单。你也必须更新。这是一个非常完整的回答。我真的很感激这一点,我已经处理了一段时间,我发现关于modelformset\u factory
的第一部分对于显示初始空模板很有用。如何动态添加另一个表单?例如,当我查看页面源代码时,初始表单的iddiv\u id\u form-0-
为HTML格式。我如何动态添加div\u id\u form-1-
,div\u id\u form-2-
,等等。基本上,您拥有正确的模式。将extra=1
传递到表单集工厂,它将输出额外的空表单。使用CSS隐藏它,然后在Javascript中可以克隆它,并在每次需要新表单时显示克隆。不过有两个问题:1)javascript必须更新每个克隆的ID;2)表单集使用隐藏的管理表单来跟踪页面上有多少表单。你也必须更新它。