2016-08-12 3 views
3

MS SQL Server에는 계산 된 열을 만드는 기능이 있습니다. 검색 할 때 즉시 계산되는 테이블 열입니다. 이 정도면 Django 모델의 메소드를 사용하여 계산 된 값을 검색하는 방법에 매핑됩니다. 일반적으로 저장된 Forename/Surname 필드를 기반으로 전체 이름을 검색합니다.Django의 영구 계산 된 필드

값 비싼 작업의 경우 SQL Server는 Persisted 옵션을 제공합니다. 이렇게하면 테이블 열이 계산 결과로 채워지고 테이블이 업데이트 될 때 결과가 업데이트됩니다. 계산이 빠르지 만 액세스와 비교할 때 자주 변경되지 않는 경우 매우 유용한 기능입니다.

그러나 장고에서는이 기능을 복제 할 수있는 방법을 찾을 수 없습니다. 나는 명백한 것을 놓치고 있는가? 내 최고의 추측 매개 변수로 함수를 사용하는 일종의 사용자 지정 필드 것입니다 있지만 그 중 기존 하나를 볼 수 없습니다. 더 좋은 방법이 있습니까?

답변

3

한 가지 방법은 당신은 어떤 모델 형태에서 exclude it을 관리자에서이 특별한 필드 read-only을 유사 수있는 객체가 저장 될 때마다 계산되는 일반 모델 필드, 예를 들어, :

class MyModel(models.Model): 
    first_name = models.CharField(max_length=255) 
    surname = models.CharField(max_length=255) 

    # This is your 'persisted' field 
    full_name = models.CharField(max_length=255, blank=True) 

    def save(self, *args, **kwargs): 
     # set the full name whenever the object is saved 
     self.full_name = '{} {}'.format(self.first_name, self.surname) 
     super(MyModel, self).save(*args, **kwargs) 

을 사용하는 것입니다 .

+0

나는 분명히 바보입니다. 이것은 문제를 해결할 수있는 좋은 방법입니다. 필드를 삽입 및 삭제 (항목 수에 따라 다름) 할 때 다시 계산해야하기 때문에 저장 신호를 약간 수정하고 후크를 수정합니다. 그러나 그렇습니다.이 접근 방식은 본질적으로 정확합니다. – James