1
我有一個處理和打印表單的視圖及其模板。該表單有一個ChoiceField,它將模型列表作爲選項。這是我的看法,模板和表單:表單在重定向後不在模板中呈現(django)
*views.py*
def index(request):
form = dbForm()
print "form is: ", form
return render(request, 'Directories/index.html', {'form':form})
*index.html*
<div id="content" align="center">
<form action="" method="get"> {% csrf_token %}
{{form.as_p}}
<input type="submit" value="Edit" name="_add" />
</form>
*forms.py*
model_classes = []
class dbForm(forms.Form):
model_classes_field = forms.ChoiceField(choices=models())
def models():
apps = get_app('Directories')
for model in get_models(apps):
model_classes.append((model._meta.verbose_name, model._meta.db_table),)
return model_classes
提交發送到另一個視圖,其中一個的ModelForm顯示模型的字段和每個字段的提交預計數據模型的選擇。然後將提交的數據存儲在數據庫中,並將用戶重定向回索引以從頭開始重新開始。下面是這個視圖,模板和表單:
*views.py*
def modelUpdate(request):
if 'update' in request.POST: # If the form has been submitted...
form_class = get_dynamic_form(request.GET['model_classes_field'])
form = form_class(request.POST)
if form.is_valid(): # All validation rules pass
row = form.save() #saves into database
return render(request, 'Directories/index.html')
else:
print "form errors: ", form.errors
return HttpResponse('ERROR -- Return to form submission')
*create.html*
<form action="" method="post"> {% csrf_token %}
{% for f_name in field_names %}
{% if not forloop.first %}
{{f_name}}: <input id="edit-{{f_name}}" type="text" name={{f_name}} /><br />
{% endif %}
{% endfor %}<br />
<input type="submit" name="update" value="Update" />
<input type="reset" name="Clear" value="Clear" />
</form>
*forms.py*
#create a ModelForm using a dynamic model
def get_dynamic_form(c_model):
model_class = get_model('Directories', c_model)
class ObjForm(forms.ModelForm):
class Meta:
model = model_class
return ObjForm
當表單被重定向回的index.html return render(request, 'Directories/index.html')
後的數據被保存到數據庫中出現問題。結果是,index.html根本不顯示{{form.as_p}}
。雖然當我檢查我的服務器(Apache)error.log中的print "form is: ", form
時,我的表單在那裏打印,因爲它應該是。
我不明白爲什麼數據在重定向發生後不能在我的模板中呈現,但仍然能夠正確顯示在我的服務器日誌中。
這是錯誤的原因。但是,在POST成功後,OP應該重定向回索引,而不是通過modelUpdate顯示模板。 –
啊是的!那是我在那裏失蹤的!非常感謝你的幫助! – per7inac1ousQ
@DanielRoseman,我不確定OP想要什麼。如果重定向到索引,「form」實例將會不同。 – Rohan