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']
{% 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 %}