是否可以根据其他字段使用计算(不是平凡的总和\ max \ min \ count)来注释对象?
示例:
至少某些情况的解决方法(例如,两个示例中的第一个)将具有不保存的update()
命令。这将允许我更改QuerySet中的某个字段,并在本地使用它而不更改数据库中的条目。唉,AFAIK update()
总是保存。
解决方案当然是列出查询集并使用列表推导添加字段,但我希望有更多的djangoic方法。
答案 0 :(得分: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
)在同一查询中进行过滤,您通常可以在模型类上实现属性。