我正在尝试从另一个查询执行查询,但Django说:'渲染时捕获了DatabaseError:子查询返回的行数超过1行。我正在使用PostGis。
我的模特
class Place(models.Model):
coordinate = models.PointField()
class TranslatedPlace(models.Model):
place = models.ForeignKey(Place)
我的观点
near_coordinates = Place.objects.filter(coordinate__distance_lte=(place_obj.coordinate, D(km=100)))
near_places = TranslatedPlace.objects.filter(place=near_coordinates)
答案 0 :(得分:6)
我相信您会希望使用in来过滤第二个查询集
near_coordinates = Place.objects.filter(coordinate__distance_lte=(place_obj.coordinate, D(km=100)))
near_places = TranslatedPlace.objects.filter(place__in=near_coordinates)
答案 1 :(得分:3)
如果Place.objects.filter(coordinate__distance_lte=(place_obj.coordinate, D(km=100)))
支持返回多个对象,您可以使用near_places = TranslatedPlace.objects.filter(place__in=near_coordinates)
注意__in作为地点字段。如果您只应该获得一个而且只有一个,那么您可以.get()
代替.filter()
。如果数据库中有多个,但您只想获得一个,则可以.filter(...)[0]
获取第一个。另外,如果你想根据某些排序获得第一个,你可以.filter(...).order_by('sort_field')[0]
。