2016-09-06 2 views
6

모델 필드의 합계를 반환해야하는 일부 모델을 사용하고 있습니다. 모델의 save 메서드를 재정의하거나 합계를 반환하는 사용자 지정 메서드를 만드는 것이 더 좋습니다. 두 가지 솔루션 중 성능 문제가 있습니까?Django 모델, 저장 메서드 또는 사용자 지정 메서드 재정의를 통해

옵션 1 : save 메소드를 대체하십시오.

class SomeModel(models.Model): 
    integer1 = models.IntegerField() 
    integer2 = models.IntegerField() 
    integer3 = models.IntegerField() 

    sum_integers = models.IntegerField() 

    def save(self, *args, **kwargs): 
     self.sum_integers = sum(
      [self.integer1, self.integer2, self.integer3]) 
     self.sum_integers.save() 
     return super(SomeModel, self).save(*args, **kwargs) 

옵션 2 : 사용자 정의 방법 대답은 당신이 sum_integers을 사용하려는 방법에 따라 달라집니다

class SomeModel(models.Model): 
    integer1 = models.IntegerField() 
    integer2 = models.IntegerField() 
    integer3 = models.IntegerField() 

    @property 
    def sum_integers(self): 
     return sum([self.integer1, self.integer2, self.integer3]) 

답변

2

. 당신이 DB에 필드로 유지한다면, 당신은 그것에 대한 질의를 할 수있을 것이고, 속성으로 그것은 매우 까다로울 것입니다.

반면에 쿼리를 작성하지 않고이 데이터가 유용하지 않은 경우 (즉, 데이터 표현으로 sum_integers가 필요함) 속성을 사용해야합니다. 응용 프로그램 성능의 관점에서

는 : 당신은 수천 개의 개체에 복잡한 작업을하려는 경우 - 그것은 몇 번을 호출하는 경우가 cached_property에 열의 값 또는 적어도 변화의 속성을 저장하기 위해 더 좋을 수도 .

요약에서 DB 열에 sum 값을 저장하는 것이 보편적이며 다운 그레이드가 없지만 경우에 따라 property 접근 방식을 사용하면 데이터 모델을보다 깨끗하게 유지하고 디스크 공간을 절약 할 수 있습니다.

귀하의 질문에 대한 답변입니다. 확실하지 않은 질문이 있으시면 자유롭게 기입하십시오.

+0

찬반 양론에 대해 감사드립니다. – Andreas

2

필드를 더 업데이트해야하는지 아니면 더 많은 금액을 추가해야하는지에 따라 다릅니다.

나는 더 일반적인 것을 만들기 위해 연산이 더하기뿐만 아니라 많은 수의 복잡한 계산을한다고 가정하고있다.

가끔씩 합계를 구해야한다면 모델 필드를 만들고 값을 저장하는 것이 좋습니다.

대부분 업데이트해야하는 경우 일반적으로 통화시 값을 가져 오는 것이 좋습니다 (두 번째 방법).

관련 문제