Django - 基于类的通用视图 - "没有要重定向到的URL"

Pie*_*NAY 47 django redirect django-class-based-views

我正在使用通用的CreateView,如:

#urls.py

from django.conf.urls.defaults import *
from django.views.generic import CreateView
from content.models import myModel

urlpatterns = patterns('myApp.views',
    (r'myCreate/$', CreateView.as_view(model=myModel)),
)
Run Code Online (Sandbox Code Playgroud)

使用mymodel_form.html模板,例如:

<form method="post" action="">
{% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

当我提交表单时,会创建新对象但我收到错误

在...处配置不当

没有要重定向到的网址.在模型上提供url或定义get_absolute_url方法.

如何指定成功重定向的URL?

Nic*_*win 74

你试过传入success_url吗?例如

CreateView.as_view(model=myModel, success_url="/success/")
Run Code Online (Sandbox Code Playgroud)

或者如果要重定向到命名视图:

CreateView.as_view(model=myModel, success_url=reverse('success-url'))
Run Code Online (Sandbox Code Playgroud)

  • @Glide没问题.关键是`success_url`没有记录在`CreateView`下,而是在`ModelFormMixin`下.Django文档有时难以通过. (8认同)
  • 如果我想"回到我来自哪里",重定向回到启动创建的页面怎么办? (7认同)

zza*_*art 19

您也可以尝试在模型中定义get_absolute_url.例如

class Something(models.Model):
    name = models.CharField(max_length=50, verbose_name='name')

    class Meta:
        pass

    def get_absolute_url(self):
        return u'/some_url/%d' % self.id 
Run Code Online (Sandbox Code Playgroud)