我有一個媒體模型和一個產品模型。當用戶創建產品時,他們首先上傳圖片,然后,他們會被轉發到產品詳細信息頁面,在那里他們可以編輯產品屬性。這工作正常,但是如果用戶不上傳圖片,我希望程序跳過創建媒體對象并直接進入產品詳細信息頁面。我嘗試從 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
提交
取消