【问题标题】:Create a query on the division of two fields (that span a FK relationship)创建关于划分两个字段的查询(跨越 FK 关系)
【发布时间】:2012-02-09 07:46:52
【问题描述】:

我有一个对象:

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)

但是没有这样的divison聚合函数。 This answer 建议使用extra,即

.extra({ 'select' : 'width/height' )

但由于宽度和高度在不同的表中,我不确定如何跨越关系(即编写 SQL)来执行此操作。有人可以提供一些帮助吗?

【问题讨论】:

    标签: sql django aggregate-functions


    【解决方案1】:

    考虑使用F() objects 而不是聚合。

    此查询乘以比率以对单个字段进行直接比较:

    Foo.objects.filter(image__width__gte=F('image__height') * min_ratio, 
                       image__width__lte=F('image__height') * max_ratio)
    

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 2010-09-24
      • 2021-12-03
      • 1970-01-01
      • 2010-11-09
      • 2014-12-29
      • 1970-01-01
      • 2011-09-18
      • 2021-11-13
      相关资源
      最近更新 更多