我有一个媒体模型和一个产品模型。当用户创建产品时,他们首先上传图片,然后,他们会被转发到产品详细信息页面,在那里他们可以编辑产品属性。这工作正常,但是如果用户不上传图片,我希望程序跳过创建媒体对象并直接进入产品详细信息页面。我尝试从 form_valid() 返回一个 reverse() 函数,但这不起作用,所以我想知道是否有人知道这是为什么以及如何解决这个问题?我目前的代码:class ProductMediaCreate(generic.CreateView): model = ProductMedia fields = ('media',) template_name = 'media/media_create.html' def form_valid(self, form): product_obj = Product.objects.create() if not form.instance.media: return reverse('product_detail', kwargs={'pk': product_obj.pk}) form.instance.product = product_obj return super().form_valid(form) def get_success_url(self): return reverse('product_detail', kwargs={'pk': self.product.pk})然而,这会产生错误:'str' object has no attribute 'get'当我在没有图片的情况下在 CreateView 上提交表单时。编辑:不确定这是否有帮助,但是在错误的回溯之后,错误的来源在行上的 clickjacking.py 中指出:(if response.get('X-Frame-Options') is not None: 我不确定这意味着什么)预先感谢您的任何帮助!
1 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
我想到了!
您不能直接在 form_valid 中使用reverse(),因为 form_valid() 正在等待响应,因此您必须在反向函数周围使用 HttpResponseRedirect() 。
IE
if not form.instance.media: return HttpResponseRedirect(reverse('product_detail', kwargs={'pk': product_obj.pk}))
要获取 HttpResponseRedirect,请从 django.http 导入它:
from django.http import HttpResponseRedirect
希望对将来的人有所帮助!:)
添加回答
举报
0/150
提交
取消