我创建了django form.py文件:
from django import forms
from models import ResumeModel
class ResumeForm(forms.ModelForm):
username = forms.CharField(max_length = 200)
first_name = forms.CharField(max_length = 200)
last_name = forms.CharField(max_length = 200)
fathers_name = forms.CharField(max_length = 200)
email = forms.EmailField(required=True, label='Your e-mail address')
message = forms.CharField(widget=forms.Textarea)
class Meta():
model = ResumeModel
fields =('username','first_name','last_name','fathers_name','email','message')
views.py:
def save(request):
if 'submit' in request.POST:
form = ResumeForm(request.POST)
if form.is_valid():
form.save()
form = ResumeForm()
return render(request, '/success/', {'form': form})
else:
form = ResumeForm()
args = {}
args.update(csrf(request))
args['form'] =form
return render_to_response('create.html',args)
urls.py:
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^save/', 'Resume.views.save'),
url(r'^success/$', TemplateView.as_view(template_name='success.html')),
)
现在一切正常。问题是,当我提交表单时,它移动到成功页面,当我回到上一页/ save / page时,它保存我提交的字段中的所有值。如果按back button to go back to that form page having url as "/save/ "
答案 0 :(得分:1)
这是关于浏览器的行为。浏览器在其缓存中显示页面而不是调用新页面。
你可以通过使用javascript来解决这个问题。不幸的是浏览器也没有再次运行javascript代码。
但你可以试试:
$(window).bind("pageshow", function() {
// Clean form values
});
由JQuery
答案 1 :(得分:1)
这是一个浏览器实现细节。您可以使用JavaScript破解它或破坏缓存等。this stackoverflow question中讨论了该主题。
然而,更好的UI方法可能是使用AJAX来POST表单的序列化版本。如果您在view
中成功验证并处理该表单(在您的简历模型表中插入新行等),则可以发送一个JSON响应,该响应可能会调用某些JavaScript来清除表单字段(可能使用{{ 3}})。然后,如果需要,用户可以轻松地提交另一个表单。
另请注意,建议您在成功POST
后使用.reset()
(目前您有render()
个回复)。这会阻止用户再次重新提交表单,并可能会复制数据库中的行等。