2011-02-11 96 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)以在同一查询中进行过滤,则通常可以在模型类上实现一个属性。