为什么添加Django重定向会阻止填充数据库?

时间:2019-03-01 03:59:26

标签: python django

长话短说,实现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>

2 个答案:

答案 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'