[英]django - CreateView to not create a model
我有一個用於創建用戶的自定義create_user()
方法,但我想轉到CreateView
視圖。
在創建用戶之前,我需要提供一些其他參數,並且需要創建用戶對象來進行更多處理(發送電子郵件)等。
如何在CreateView中操縱對象的創建。 我可以將我的create_user
方法放入視圖的form_valid
方法中,但隨后return super(UserCreate, self).form_valid(form)
( return super(UserCreate, self).form_valid(form)
)將創建一個新對象。
class UserCreate(generic.CreateView):
model = User
template_name = 'crm2/create_user.html'
fields = ['email', 'username', 'namespaces']
success_url = reverse_lazy('crm2:userCreate')
def form_valid(self, form):
user = create_user(self.request.POST['username'],
self.request.POST['email'], str(uuid4()),
self.request.POST['namespaces'])
reset_link = get_reset_link(user)
send_mail_set_password(user, reset_link)
return HttpResponseRedirect(self.get_success_url())
[[ create_user
需要username
, email
, password
, namespaces
]]
錯誤是: 'NoneType' object has no attribute '__dict__'
我通過查看CreateView
工作原理弄清楚了。
傳入的請求由ProcessFormView
的post()
方法處理,該方法調用get_form_class()
和get_form()
。 后一種方法處理POST請求,因此,FormMixin中的get_form_kwargs get_form_kwargs()
代碼將提交的數據添加到關鍵字字典中。
現在,表單已綁定(即,它包含用戶提供的數據或文件),並且post()
方法現在測試is_valid()的結果,並相應地調用form_valid()或form_invalid()。
FormMixin類將form.save()
的結果放入self.object
。 用於form.save()
方法由BaseModelForm
定義,並且基本上保存與BaseModelForm
連接的Django模型的實例,該實例在CreateView
表單視圖的基礎上實現實際的創建。 當form.save()
返回保存到數據庫的對象時,將其存儲在self.object
並將其傳遞給模板是有意義的。
因此,
class UserCreate(generic.CreateView):
model = User
template_name = 'crm2/create_user.html'
fields = ['email', 'username', 'namespaces']
success_url = reverse_lazy('crm2:userCreate')
def get_form(self, form_class):
form = super(UserCreate, self).get_form(form_class)
return form
def form_valid(self, form):
self.object = create_user(self.request.POST['username'],
self.request.POST['email'], str(uuid4()),
self.request.POST['namespaces'])
reset_link = get_reset_link(self.object)
send_mail_set_password(self.object, reset_link)
return HttpResponseRedirect(self.get_success_url())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.