我有一个表单类视图,当用户填写表单时会创建一个对象(目录中的产品)。该对象在视图的form_valid方法内创建。我希望该视图通过FormView的“ success_url”属性重定向到创建的对象url(产品url)。
问题是我不知道如何在success_url方法中指定该url,因为在定义类本身时仍未创建该对象。我已经尝试过用对象的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)
答案 0 :(得分:2)
在类级别,没有product
,因此您不能在product
中使用success_url
。
您可以 做的是覆盖get_success_url
,从而确定URL,例如:
from django.urls import reverse
class ImageUpload(FormView):
def get_success_url(self):
return reverse('images:product', kwargs={'id': self.product.id })
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
属性并对其进行解析。