长话短说,实现Django CreateViews时遇到了问题。我非常接近使它起作用,但是突然出现了一个新问题。在以下代码中没有重定向,我的数据库将填充新的Model实例。但是,将重定向添加到成功页面后,我无法在数据库或Django管理页面中看到新的模型实例。如果我缺少简单的东西,请提前道歉。如果有必要,我可以发布更多代码,但我想这将是views.py或模板中的内容
views.py
class SuccessView(TemplateView):
template_name = "success.html"
class DeviceChoiceView(CreateView):
model = DeviceChoice
form_class = DeviceChoiceForm
success_url = 'success.html'
template_name = 'index.html'
## All the code below this point is what stops the database from populating ##
def form_valid(self,form):
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return ('success')
index.html
<!DOCTYPE html>
<html>
<head>
<title>Port Reset</title>
</head>
<body>
<h1>Device Database</h1>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" id="deviceSelection" value="Submit">
</form>
</body>
答案 0 :(得分:0)
您将覆盖通常在form_valid()中实现的save()函数,因此它阻止了该表单提交到DB。
model = form.save(commit=False)
model.save()
在返回重定向之前添加它。
答案 1 :(得分:0)
我建议不要覆盖form_valid函数,因为它会导致您覆盖一些重要的代码,而您可以使用 reverse_lazy
来减少代码行(更好的实践)from django.urls import reverse_lazy
class DeviceChoiceView(CreateView):
model = DeviceChoice
form_class = DeviceChoiceForm
success_url = reverse_lazy('success') #view handling the success.html
template_name = 'index.html'