Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django表单在同一模板上两次_Python_Django - Fatal编程技术网

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
的第一部分对于显示初始空模板很有用。如何动态添加另一个表单?例如,当我查看页面源代码时,初始表单的id
div\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
的第一部分对于显示初始空模板很有用。如何动态添加另一个表单?例如,当我查看页面源代码时,初始表单的id
div\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)表单集使用隐藏的
管理表单来跟踪页面上有多少表单。你也必须更新它。