2016-09-16 64 views
1

我使用UpdateView作为discussed here。我想扩展下面的类,以便在html页面呈现之前执行一些特定于对象的计算。例如,下面的一些虚拟代码do_some_calc()将添加两个数字,结果将存储在MyModel的对象/实例中。在模板呈现之前在UpdateView中添加工作

是否有首选方法?

models.py: 

class MyModel(models.Model): 
    A = models.FloatField(null=True) 
    B = models.FloatField(null=True) 
    C = models.FloatField(null=True) 

    def do_some_calc(self): 
     self.C = self.A + self.B 

views.py: 

class UpdateMyModelView(UpdateView): 
    model = MyModel 
    template_name='data_form.html' 
    fields = ['A', 'B', 'C'] 

    def get_success_url(self): 
     return self.request.POST.get('next', '/default-url/') 

回答

2

这是值得商榷get_success_url是否做到这一点,正确的地方。 form_valid可能是更好的地方。

def form_valid(self, form): 
    instance = form.save(commit=False) 
    instance.A = instance.B + instance.C 
    return super(UpdateMyModelView, self).form_valid(form)  

这样你只能保存一次模型。如果您尝试在get_success_url中执行此操作,则模型实例已保存在超类的form_valid方法中。

def get_success_url(self): 
    # note self.object is the model instance 
    self.object.A = self.object.B + self.object.C 
    return self.request.POST.get('next', '/default-url/') 
+0

谢谢。这对我行得通。 – js07920

+0

很高兴有帮助 – e4c5