2011-06-03 78 views
0

我正在使用django 1.3的基於分類的視圖,並試圖找出如何創建一個對象而不使用窗體。我不需要任何用戶輸入來創建對象,但我仍然收到錯誤消息,指出該模板已丟失。下面是我目前的觀點,我曾試圖對form_valid方法進行子類化,但它不起作用。任何幫助,將不勝感激。使用沒有窗體的Django CreateView來創建對象

class ReviewerCreateView(CreateView): 
    model = Reviewer 

    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.user = self.request.user 
     self.object.role = 2 
     self.object.save() 
     return HttpResponseRedirect(self.get_success_url()) 

回答

3

甲CreateView的是一個專門的視圖,其目的是顯示在GET形式和驗證表單數據,並創建基於在POST形式數據的新對象。

因爲您不需要顯示錶單並處理表單數據,所以CreateView不是您工作的工具。

您可能需要一個普通的舊的基於函數的視圖,或者,如果您更喜歡使用基於類的視圖,則可以從View派生並覆蓋get()或post()。例如,調整您的示例代碼:

class ReviewerCreator(View): 
    def get(request, *args, **kwargs): 
     Reviewer(user=request.user, role=2).save() 
     return HttpResponseRedirect('/your_success_url/') 
+0

感謝您指點我正確的方向。我正在使用django-registration,並已將帳戶創建邏輯添加到激活功能及其正常工作。 – thesteve 2011-06-09 16:59:05

+0

使用GET方法在後端創建資源是不好的做法。應該使用POST/PUT/PATCH – 2017-08-30 22:41:46

-1

我不認爲某個視圖需要對錶單做任何明確的處理,如果它不需要的話。

您可以實例化審閱者對象。這只是一個python對象。

class ReviewerCreateView(CreateView): 
    model = Reviewer 

    self.object.user = self.request.user 
    self.object.role = 2 
    self.object.save() 
    return HttpResponseRedirect(self.get_success_url()) 
相關問題