Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Django 2.x-使用ModelForm在表单中创建包含无限项的列表_Django - Fatal编程技术网

Django 2.x-使用ModelForm在表单中创建包含无限项的列表

Django 2.x-使用ModelForm在表单中创建包含无限项的列表,django,Django,我试图创建一个ModelForm,它包含(但不仅仅是)一个可以添加无限项的字段。为了澄清,公共ToDo列表示例几乎正是我想要做的,用户可以在输入中添加一个项目,并将其显示为添加到ToDo列表中。在该表单中,用户可以在提交还包含其他字段(如标题和说明)的表单之前向列表中添加任意数量的项目 我已经了解了如何使用自定义表单实现这一点,但我正在尝试掌握ModelForms,并将本学习项目中的所有表单作为ModelForms保留 我的问题是,这在ModelForms中可能吗?我认为也许可以创建一个数组,其

我试图创建一个ModelForm,它包含(但不仅仅是)一个可以添加无限项的字段。为了澄清,公共ToDo列表示例几乎正是我想要做的,用户可以在输入中添加一个项目,并将其显示为添加到ToDo列表中。在该表单中,用户可以在提交还包含其他字段(如标题和说明)的表单之前向列表中添加任意数量的项目

我已经了解了如何使用自定义表单实现这一点,但我正在尝试掌握ModelForms,并将本学习项目中的所有表单作为ModelForms保留


我的问题是,这在ModelForms中可能吗?我认为也许可以创建一个数组,其中每个添加的项都可以附加到数组中,在提交最终表单时,该数组可以存储在db中,但实际实现这一点超出了我的技能水平。这是正确的路线,还是有更好的方法?谢谢你帮我学习

不需要在数据库中存储数组。只需为数组项创建一个新表。在这种情况下,您必须为“ToDo”创建一个Django模型,并与用户(或列表)建立多对一关系。例如:

class User(models.Model):
    name = models.CharField(max_length=30, primary_key=True, blank=False)
    # etc...

class ToDo(models.Model):
    title = models.CharField(max_length=50, primary_key=True, blank=False)
    description = models.TextField(blank=True, null=True)
    user = models.ForeignKey(User, blank=True on_delete=models.CASCADE)
然后创建其表单:

class UserForm(forms.ModelForm):
    class Meta:
        fields = [...]
        model = User

class ToDoForm(forms.ModelForm):
    class Meta:
        fields = [...]
        model = ToDo
视图:

模板:

<form action="your_view" method="POST">
    {% csrf_token %}
    {{ user_form.as_p }}
    {{ todo_form.as_p }}
    <button type="submit">
</form>

{%csrf_令牌%}
{{user_form.as_p}
{{todo_form.as_p}}

您可能可以根据需要使用ModelForms,但这实际上取决于“待办事项”所需的逻辑。您需要什么还不清楚:用户应该能够填写他想要的任意多的字段,还是在数据库中的值之间进行选择?你已经尝试过的例子help@May.D例如,如果有人想创建一个购物清单,他们可以在其中为清单命名,为清单添加描述,然后根据需要向清单添加尽可能多的项目
<form action="your_view" method="POST">
    {% csrf_token %}
    {{ user_form.as_p }}
    {{ todo_form.as_p }}
    <button type="submit">
</form>