首页 > 解决方案 > 如果用户选择“保存”按钮,则 Django save() 表单,如果用户选择“计算”按钮,则保存 (commit=false)

问题描述

如果用户选择“保存”按钮并返回到列表视图,我想将表单保存到数据库,如果用户选择“计算”按钮并停留在现在更新的详细视图上,则保存(提交 = false)。我有一些在保存模型时执行的代码,我希望用户能够通过单击“计算”来更新结果而无需写入数据库。如果他们对更新感到满意,那么他们可以单击“保存”按钮并将其写入数据库。

这是模型:

    def save(self, *args, **kwargs):

        self.propStartBalance = self.some_calc()
        self.propAvgResidual = self.some_other_calc()
        super(Proposal, self).save(*args, **kwargs)

这是视图:

class ProposalUpdateView(LoginRequiredMixin, UpdateView):
    model = Proposal
    context_object_name = "proposal_update"
    template_name = 'proposal/proposal_create.html'
    success_url = reverse_lazy('proposal_list')
    form_class = ProposalForm

    def form_valid(self, form):
        form.instance.proposalOwnerID = self.request.user
        return super().form_valid(form)

    def save(self,commit=True):
        propInstance = super().save(commit= False)
        if 'calculateButton' in self.request.POST:
            commit = False

        if commit:
            propInstance.save()
        
        return propInstance

如果用户选择“计算”,我希望执行模型代码,并希望详细模板与新值一起留在屏幕上。任何帮助将不胜感激。

标签: django-modelsdjango-viewsdjango-forms

解决方案


推荐阅读