Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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 在一个表单向导中使用两个模型_Python_Django - Fatal编程技术网

Python 在一个表单向导中使用两个模型

Python 在一个表单向导中使用两个模型,python,django,Python,Django,我在models.py中设置了两个模型:Parent和Child class Parent(models.Model): id = models.AutoField(primary_key=True) name = models.CharField() city = models.CharField() class Child(models.Model): id = models.AutoField(primary_key=True) parent =

我在
models.py
中设置了两个模型:
Parent
Child

class Parent(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField()
    city = models.CharField()


class Child(models.Model):
    id = models.AutoField(primary_key=True)
    parent = models.ForeignKey(Parent)
    name = models.CharField()

现在,在为这些表单输入表单的过程中,我想创建一个
FormWizard
,其中第一个表单包含
Parent
,第二个视图包含
Child
的详细信息,同时保留上一个表单的详细信息。这可能吗?如果是这样的话,请引导我阅读一些代码示例

是的,这是可能的,就像你建议的那样,最好的方法是使用向导表单。您可以使用任意数量的模型自定义向导窗体。我将通过两个步骤向您展示创建表单的示例方法:

  • 使用表单生成父对象的第一步
  • 生成子对象的第二步
我想指出的是,在这种情况下,也许你可以考虑采取动态的第二步,以防父母可以有不止一个孩子。我强烈建议您检查两个文档页面:

  • :这对于分隔大窗体或将不同窗体合并到一个窗体中很有用
  • 这对于具有某种“动态”形式很有用

第一步:为向导表单(forms.py)创建所需数量的表单。

  • 您要创建的表单可以是普通表单或模型表单
  • 将“NameForm01”更改为您想要的表单名称

    类名form01(forms.ModelForm):
    类元:
    模型=父
    字段=['name','city']

    类名form02(forms.ModelForm):
    类元:
    模特儿
    #我们不添加父字段,因为我们关联子字段
    #在视图中显示父对象
    字段=['name']

第二步:创建向导视图(views.py)

第三步:创建url以管理向导表单(url.py)

第四步:创建向导表单将使用的模板

此模板是django在文档()中提供的示例模板

在本例中,您应该将此模板称为“your_wizard_base.html”,并将其放置在Templates文件夹中

{% extends "base.html" %}
{% load i18n %}

{% block head %}
{{ wizard.form.media }}
{% endblock %}

{% block content %}
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p>
<form action="" method="post">{% csrf_token %}
<table>
{{ wizard.management_form }}
{% if wizard.form.forms %}
    {{ wizard.form.management_form }}
    {% for form in wizard.form.forms %}
        {{ form }}
    {% endfor %}
{% else %}
    {{ wizard.form }}
{% endif %}
</table>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">{% trans "first step" %}</button>
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "prev step" %}</button>
{% endif %}
<input type="submit" value="{% trans "submit" %}"/>
</form>
{% endblock %}
{%extends“base.html”%}
{%load i18n%}
{%block head%}
{{wizard.form.media}
{%endblock%}
{%block content%}
{{wizard.steps.count}的步骤{wizard.steps.step1}

{%csrf_令牌%} {{wizard.management_form} {%if wizard.form.forms%} {{wizard.form.management_form} {wizard.form.forms%中窗体的%s} {{form}} {%endfor%} {%else%} {{wizard.form} {%endif%} {%if wizard.steps.prev%} {%trans“第一步”%} {%trans“上一步”%} {%endif%} {%endblock%}
此示例模板可能足以让您使用WizardForm进行练习,然后根据自己的需要对其进行调整

from YOUR_PROJECT.forms import NameForm01, NameForm02
from YOUR_PROJECT.views.content import YourNameWizard
# ... other imports you have in your urls.py ...

urlpatterns = patterns('',
    # ... other patterns ...

    url(r'^your/url/?$', YourNameWizard.as_view([NameForm01, NameForm02]), name='your_url_name'),

    # ... other patterns ...
)
{% extends "base.html" %}
{% load i18n %}

{% block head %}
{{ wizard.form.media }}
{% endblock %}

{% block content %}
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p>
<form action="" method="post">{% csrf_token %}
<table>
{{ wizard.management_form }}
{% if wizard.form.forms %}
    {{ wizard.form.management_form }}
    {% for form in wizard.form.forms %}
        {{ form }}
    {% endfor %}
{% else %}
    {{ wizard.form }}
{% endif %}
</table>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">{% trans "first step" %}</button>
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "prev step" %}</button>
{% endif %}
<input type="submit" value="{% trans "submit" %}"/>
</form>
{% endblock %}