注释中不允许使用OuterRef?

时间:2018-06-15 18:02:09

标签: python django postgis geodjango django-postgresql

我尝试使用两个相关polygons之间的距离来注释Entity个对象的查询集。每个实体都有自己的一组相关多边形,存储在与外键相关的shape对象的EntityFeature属性中。 EntityFeatures已命名,我需要找到每个实体的两个命名要素之间的距离:

Entity.objects.all().annotate(
    distance = ExpressionWrapper(
        Subquery(
            EntityFeature.objects.get(
                entity__id = OuterRef('id'),
                name = 'feature_a'
            ).shape.centroid.distance(
                Subquery(
                    EntityFeature.objects.get(
                        entity__id = OuterRef(OuterRef('id')),
                        name = 'feature_b'
                    ).shape.centroid
                )
            )
        ), output_field = DecimalField()
    )
)

一旦到达第一个OuterRef,我就会ValueError: This queryset contains a reference to an outer query and may only be used in a subquery.我尝试删除第一个子查询并使用F('id'),但我认为id指的是EntityFeature& #39;代替它,它会抛出DoesNotExist: EntityFeature matching query does not exist.

我是以错误的方式来做这件事的吗?找到查询集中每个事物的两个相关对象之间距离的最佳方法是什么?

[python 2.7.15 / django 1.11]

0 个答案:

没有答案