我尝试使用两个相关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]