2016-11-14 29 views
0

我有一個模板,在我的Django網站的某個URL上顯示某個ModelForm。該ModelForm是基於兩個領域的典範,如何讓Django ModelForm在提交時重定向到另一個ModelForm?

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,它使用模型的描述字段,並且在驗證數據是新的之後,我想讓我的第一個表單重定向到第二個表單。理想情況下,描述將被鏈接到這個特定的數據片段,並且兩者都將進入相同的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

表單不重定向到任何東西。重定向是視圖的責任。

您需要兩個視圖和兩個URL;當第一次表單提交成功時,視圖應該重定向到第二個URL。