【问题标题】:CreateView is not returning an HttpResponseCreateView 没有返回 HttpResponse
【发布时间】:2013-05-22 10:43:00
【问题描述】:

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

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

【问题讨论】:

  • form_valid 方法需要有一个return(如果您使用的是ModelForm):return super(PeopleImportCsv, self).form_valid(form)
  • @Timmy:太好了,这就是缺少的。非常感谢。您能否将其添加为答案,以便我接受?

标签: django django-class-based-views


【解决方案1】:

您需要有来自form_valid 方法的return(如果您使用的是ModelForm):

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

你可以see the methods signature in the Django source

P.S这里有一个非常有用的站点,用于引用 Django 的许多基于类的视图:http://ccbv.co.uk/

【讨论】:

  • 多么出色的链接!你还有其他人吗?
  • 我今天找到了一个很好的 django-links 网站:djangolinks.com。您可能会在那里找到更多有趣的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
相关资源
最近更新 更多