4

我有以下扩展基本 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)

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

The view people.views.PeopleImportCsv didn't return an HttpResponse object.

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

4

1 回答 1

7

您需要 a returnfromform_valid方法(如果您使用的是 a ModelForm):

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

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

PS这里有一个非常有用的站点可以参考 Django 的许多基于类的视图:http: //ccbv.co.uk/

于 2013-05-22T10:50:39.927 回答