如何让Django ModelForm在提交时重定向到另一个ModelForm?

时间:2016-11-14 17:39:10

标签: django forms validation redirect

我有一个模板,在我的Django网站的某个网址上显示某个ModelFormModelForm基于具有两个字段的模型

class ActionCode(models.Model):
    action_code = models.CharField(blank=False, max_length=10,
                                   verbose_name="Action Code")
    description = models.TextField(blank=True)

    class Meta:
        unique_together = ('action_code',)

我希望我的ModelForm仅向用户提供第一个字段(操作代码),然后在提交时,验证输入的值是否已存在。如果它尚不存在,我想重定向用户,以便能够输入该操作代码的描述(我的模型中的第二个字段)。所以我写了第二个ModelForm,它使用了模型的Description字段,我希望在验证数据是新的之后,我的第一个表单重定向到第二个表单。理想情况下,描述将链接到这个特定的数据,并且两者都将进入相同的Django数据库表(因此它们来自相同的模型)。但是,当我输入新的数据并点击提交时,该网站只停留在/ action_code / URL并显示“提交”按钮,而不显示任何其他内容。如何将第一个表单重定向到第二个表单,如果数据是新的,确保它只是这样做的最佳方法是什么?

以下是我的urls.py

url(r'^action_code/', action_code_form, name="actioncode"),
url(r'descr_form/', code_description_form, name='description'),

以下是`forms.py'中的两个表单:

class ActionCodeForm(ModelForm):
    class Meta:
        model = ActionCode
        fields = ('action_code',)


class ActionCodeDescriptionForm(ModelForm):
    class Meta:
        model = ActionCode
        fields = ('description',)

这是我的views.py

def action_code_form(request):
    form = ActionCodeForm()
    description_form = ActionCodeDescriptionForm
    if request.method == 'POST':
        form = ActionCodeForm(request.POST)
        if form.is_valid():
            action_code = form.cleaned_data['action_code']
            form.save()
            return render(request, 'description_form.html',
                          {'form': description_form})
    return render(request, 'action_code_form.html', {'form': form})


def code_description_form(request):
    form = ActionCodeDescriptionForm()
    if request.method == 'POST':
        form = ActionCodeDescriptionForm(request.POST)
        if form.is_valid():
            form.save()
    return render(request, 'description_form.html', {'descr_form': form}) 

我的模板:

action_code_form.html:

<form method="post" action="">
{% csrf_token %}
<table>
{{ form }}
</table>
<input type="submit" value="Submit"/>
</form>

description_form.html:

<form method="post" action="">
{% csrf_token %}
<table>
{{ descr_form }}
</table>
<input type="submit" value="Submit"/>
</form>

1 个答案:

答案 0 :(得分:1)

表单不会重定向到任何内容。视图负责进行重定向。

您需要两个视图,其中包含两个网址;当第一个表单提交成功时,视图应重定向到第二个URL。