[英]Django: transaction.atomic in CreateView, form_valid()
在我的CreateView
為form_valid
具有transaction.atomic
是否有意義?
@transaction.atomic
def form_valid(self, form):
self.instance = form.save(commit=False)
self.instance.event = self.request.event
# When the super method is called the instance
# is saved because it's a model form
super().form_valid(form)
return HttpResponseRedirect(self.get_success_url())
如果您的表單具有“多對多”字段,則事務裝飾器將確保用於保存實例的查詢和“多對多”字段在同一事務中運行。
如果您的表單沒有多對多字段,那么將只有一個SQL查詢來保存行,並且不需要事務。
super().form_valid(form)
,您的return語句復制了super().form_valid(form)
會執行的操作。 您可以return super().form_valid(form)
,或者明確地調用save()
可能更清晰。
@transaction.atomic
def form_valid(self, form):
self.instance = form.save(commit=False)
self.instance.event = self.request.event
self.instance.save()
self.instance.save_m2m() # if you have m2m fields
return HttpResponseRedirect(self.get_success_url())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.