我正在使用UpdateView
作为discussed here。我想扩展下面的类,以便在呈现html页面之前执行一些特定于对象的计算。例如,下面的一些虚拟代码do_some_calc()
将添加两个数字,结果将存储在MyModel的对象/实例中。
有首选方法吗?
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/')
答案 0 :(得分: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/')