CreateView没有返回HttpResponse

hel*_*ate 3 django class-based-views

我有以下视图扩展基础CreateView:

class PeopleImportCsv(FailedLoginMessageMixin, CreateView):
    model = CsvFile
    form_class = CustomerCsvImportForm
    template_name = 'people/customer_uploadcsv_form.html'

    def get_success_url(self):
        url = reverse('customer_process_csv', args=[self.object.id])
        return url

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.uploaded_by = self.request.user
        super(PeopleImportCsv, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)

我正在使用get_success_url()方法,因此我可以在数据库中获取新创建的对象的id.但是,当我尝试提交表单时,我收到以下ValueError消息:

The view people.views.PeopleImportCsv didn't return an HttpResponse object.
Run Code Online (Sandbox Code Playgroud)

如果我assert False在get_success_url()中分配url之后立即放置一个,那么我可以看到它有正确的url我期待所以我该怎么做才能解决这个问题?

Tim*_*ony 6

你需要returnform_valid方法中获得一个(如果你使用的是ModelForm):

def form_valid(self, form):
    instance = form.save(commit=False)
    instance.uploaded_by = self.request.user
    return super(PeopleImportCsv, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)

您可以在Django源中看到方法签名

PS有一个非常有用的网站,可以在这里引用Djangos许多基于类的视图:http://ccbv.co.uk/