總體目標:能夠更新和創建來自同一網頁的多個對象的記錄。當用戶更新或創建一條記錄時,他們會被引導回同一頁面。當他們回到此頁面時,他們的帖子結果應該被反映出來,並且他們應該能夠安全刷新頁面而無需重新提交表單。Django ModelForm - 具有不同動作視圖和重定向的模板中的多個表單
這裏是我的views.py
@login_required()
def index(request):
activity_model_form = ActivityModelForm()
rhi_model_form = RhiModelForm()
activity_list = Activity.objects.all()
rhi_list = Rhi.objects.all()
if request.method == 'POST':
context = {
'activity_list': activity_list,
'rhi_list': rhi_list,
}
return render(request, 'ec/index.html', context)
else:
context = {
'activity_list': activity_list,
'rhi_list': rhi_list,
'activity_model_form': activity_model_form,
'rhi_model_form': rhi_model_form,
}
return render(request, 'ec/index.html', context)
def add_activity(request):
if request.method == 'POST':
aForm = ActivityModelForm(request.POST)
if aForm.is_valid():
aForm.save()
return HttpResponseRedirect(reverse('ec:index'))
def add_rhi(request):
if request.method == 'POST':
rForm = RhiModelForm(request.POST)
if rForm.is_valid():
newRhi = rForm.save()
return HttpResponseRedirect('ec:index')
forms.py
class RhiModelForm(forms.ModelForm):
class Meta:
model = Rhi
class ActivityModelForm(forms.ModelForm):
class Meta:
model = Activity
模板(的index.html)
{% for activity in activity_list %}
{{activity}}
{% endfor %}
<br>
{% for rhi in rhi_list %}
{{rhi}}
{% endfor %}
<br>
<form aciton="{% url 'ec:add_rhi' %}" method="post">
{% csrf_token %}
{{ rhi_model_form }}
<input type="submit" value="Add"/>
</form>
<br>
<form action="{% url 'ec:add_activity' %}" method="post">
{% csrf_token %}
{{ activity_model_form }}
<input type="submit" value="Add" />
</form>
urls.py
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^forms/add_activity',views.add_activity, name='add_activity'),
url(r'^forms/add_rhi',views.add_rhi,name='add_rhi'),
)
頁的index.html是應該持有幾種形式的主頁。在這種情況下,我決定使用它們提供的所有內置功能的模型表單。看看這裏的其他類似帖子,似乎創建不同的視圖來處理這些表單是首選的方式。從那裏,我想重新加載index.html,但我想重新查詢數據庫以獲取更新/新創建的記錄。
兩個問題:
1)模型視圖不保存。試圖提交rhi_model_form時,我被重定向到index.html而沒有記錄保存。對於我在這裏發佈的內容,我做了newRhi = rForm.save(),但我也嘗試過rForm.save(),但沒有看到任何效果。爲什麼有些示例將save方法設置爲變量?爲什麼這有幫助?無論如何,目前這兩種情況都不適合我。
2)提交後,呈現索引視圖,但它通過if request.method =='POST'部分的代碼。它爲什麼這樣做?如果我刷新頁面,它希望重新提交表單。如何在提交所有需要的數據後加載此頁面並使其刷新以避免重新提交?