【问题标题】:Django - TypeError: must be real number, not F (annotate)Django - TypeError: must be real number, not F (annotate)
【发布时间】:2021-07-26 23:02:05
【问题描述】:

我正在尝试创建一种方法,该方法返回 QuerySet 或与给定点的距离(按 LAT、LNG)的包裹。

问题是它返回错误:

@classmethod
def get_closest_parcels(cls, lat: decimal.Decimal, lng: decimal.Decimal, county=None) -> ParcelQuerySet:
    return Parcel.objects.annotate(distance=point_dist(lat, lng, F('lat'), F('lng')))

错误

geo.pyx in h3._cy.geo.point_dist()

TypeError: must be real number, not F

我的目标是找到 5 个最近的包裹。

你知道如何使用 Django ORM 做到这一点吗?

【问题讨论】:

  • F() 是一个表达式(准确地说是一个 SQL 表达式)而不是一个值。

标签: python sql django postgresql django-orm


【解决方案1】:

使用ExpressionWrapper

return Parcel.objects.annotate(distance=point_dist(..., ExpressionWrapper(F('lat'), output_field=DecimalField()) ,...))

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2019-12-29
    • 2012-12-04
    • 2018-12-23
    相关资源
    最近更新 更多