У меня есть объект:
class Image(models.Model):
width = models.IntegerField(...)
height = models.IntegerField(...)
class Foo(models.Model):
title = ...
image = models.ForeignKey(Image ...)
, и я хочу попытаться получить все Foo
объекты, имеющие связанное изображение с аналогичным соотношением сторон.В идеальном мире что-то вроде:
ratio = width/height
min = ratio - 0.25
max = ratio + 0.25
similar = ImageMeta.objects \
.annotate(ratio=Div('image__width', 'image__height')\
.filter(ratio__gte=min).filter(ratio__lte=max)
, но такой функции агрегации делений не существует. В этом ответе предлагается использовать extra
, т.е.
.extra({ 'select' : 'width/height' )
, но поскольку ширина и высота находятся в другой таблице, я не уверен, как охватить взаимосвязь (т.е. написатьSQL), чтобы сделать это.Может ли кто-нибудь предложить некоторую помощь?