2011-02-11 3 views
1

다른 필드를 기반으로하는 계산 (사소한 합계 \ max \ min \ count가 아닌)으로 객체에 주석을 추가 할 수 있습니까?django - 필드 계산을 기반으로 한 주석

예 :

  • 두 IntegerFields 필드
  • 를 기반으로 특정 계산 정수 주석을 추가하기 위해 소정의 시간 간격
  • 첨가하여 기존 TimeField 필드에 기초하여 시간 주석 필드를 추가

적어도 두 가지 예 (예 : 첫 번째 예)의 해결 방법은 저장하지 않는 update() 명령이있을 수 있습니다. 그렇게하면 QuerySet의 특정 필드를 변경하고 db의 항목을 변경하지 않고 로컬로 사용할 수 있습니다. 아아, AFAIK update() 항상 저장합니다.

물론 해결책은 목록 집합을 나열하고 목록 이해를 사용하여 필드를 추가하는 것이지만 더 장황한 방법으로 수행하기를 바랐습니다.

답변

0

사용 (내가 제대로 이해 해요 경우) 난 그냥 이런 종류의 물건을했던 RawSQL annotation :

그것은 지점에 자신의 거리에 가깝다 뭔가 도시 주석을
queryset = City.objects.annotate(distance= 
     RawSQL('sqrt(((%s - latitude)/0.010)^2 + ((%s - longitude)/0.015)^2)', 
       (latitude, longitude))) \ 
    .filter(distance__lte=radius) \ 
    .order_by('distance') 

(직선 지구 통해 다른 이상한 가정들과 함께,하지만 그것은이 질문과 관련이 없습니다).

동일한 쿼리에서 필터링을 위해 주석 (distance)이 필요하지 않은 경우 모델 클래스에 속성을 구현하기 만하면됩니다.

관련 문제