2016-09-16 3 views
1

나는 UpdateViewdiscussed 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

관련 문제