2016-09-16 70 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