2011-02-11 123 views
1

是否可以基於其他字段使用計算註釋對象(它們不是平凡的和\ max \ min \ count)?django - 基於字段計算的註釋

實例:

  • 要添加基於現有TimeField字段並加入一定的時間間隔
  • 的時間註釋字段要添加的整數註釋,則基於兩個IntegerFields字段
  • 一定計算

至少在某些情況下(例如兩個示例中的第一個)的解決方法是使用不保存的update()命令。這將允許我更改QuerySet中的某個字段,並在本地使用它而不更改數據庫中的條目。唉,AFAIK update()始終保存。

一個解決方案當然會列出查詢集並添加一個使用列表理解的字段,但我希望有一個更加Django的方式來做到這一點。

回答

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)以在同一查詢中進行過濾,則通常可以在模型類上實現一個屬性。