簡體   English   中英

Django:CreateView中的transaction.atomic,form_valid()

[英]Django: transaction.atomic in CreateView, form_valid()

在我的CreateViewform_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM