Success_url 来自在 FormView 中创建的对象 url
Success_url from created object url in FormView
我有一个表单 class 视图,它在用户填写表单时创建一个对象(目录中的产品)。该对象是在视图的 form_valid 方法中创建的。我希望视图通过 FormView 的 "success_url" 属性重定向到创建的对象 url(产品 url)。
问题是我不知道如何在 success_url 方法中指定 url,因为在定义 class 本身时仍未创建对象。我已经尝试使用 reverse_lazy,或者对象的 get_absolute_url() 方法,但同样的问题仍然存在。
class ImageUpload(FormView):
[...]
success_url = reverse_lazy('images:product', kwargs={'id': product.id })
[...]
def form_valid(self, form):
[...]
self.product = Product.objects.create(
user=self.request.user, title=title)
那么在class级别,没有product
,所以你不能在success_url
.
中使用product
您 可以 做的是覆盖 get_success_url
,从而确定 URL,例如:
from django.urls import <b>reverse</b>
class ImageUpload(FormView):
def get_success_url(self):
return <b>reverse('images:product', kwargs={'id': self.product.id })</b>
def form_valid(self, form):
self.product = Product.objects.create(user=self.request.user, title=title)
return super(ImageUpload, self).form_valid(form)
事实上,get_success_url
默认获取 success_url
属性,并解析它。
我有一个表单 class 视图,它在用户填写表单时创建一个对象(目录中的产品)。该对象是在视图的 form_valid 方法中创建的。我希望视图通过 FormView 的 "success_url" 属性重定向到创建的对象 url(产品 url)。
问题是我不知道如何在 success_url 方法中指定 url,因为在定义 class 本身时仍未创建对象。我已经尝试使用 reverse_lazy,或者对象的 get_absolute_url() 方法,但同样的问题仍然存在。
class ImageUpload(FormView):
[...]
success_url = reverse_lazy('images:product', kwargs={'id': product.id })
[...]
def form_valid(self, form):
[...]
self.product = Product.objects.create(
user=self.request.user, title=title)
那么在class级别,没有product
,所以你不能在success_url
.
product
您 可以 做的是覆盖 get_success_url
,从而确定 URL,例如:
from django.urls import <b>reverse</b>
class ImageUpload(FormView):
def get_success_url(self):
return <b>reverse('images:product', kwargs={'id': self.product.id })</b>
def form_valid(self, form):
self.product = Product.objects.create(user=self.request.user, title=title)
return super(ImageUpload, self).form_valid(form)
事实上,get_success_url
默认获取 success_url
属性,并解析它。