Django中子查询的查询
我试图从另一个查询中进行查询,但Django说:“呈现时捕获到DatabaseError:子查询返回的行数超过1行。”我使用的是PostGis 我的模型Django中子查询的查询,django,django-models,django-views,Django,Django Models,Django Views,我试图从另一个查询中进行查询,但Django说:“呈现时捕获到DatabaseError:子查询返回的行数超过1行。”我使用的是PostGis 我的模型 class Place(models.Model): coordinate = models.PointField() class TranslatedPlace(models.Model): place = models.ForeignKey(Place) 我的看法 near_coordinates = Pla
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)
我相信您会希望使用来过滤第二个查询集
near_coordinates = Place.objects.filter(coordinate__distance_lte=(place_obj.coordinate, D(km=100)))
near_places = TranslatedPlace.objects.filter(place__in=near_coordinates)
如果假定
Place.objects.filter(坐标\uuuu距离\ulte=(Place\uobj.coordinate,D(km=100))
返回多个对象,则可以使用near\uplaces=TranslatedPlace.objects.filter(坐标\uuuu in=near\u坐标)
注意Place字段中的\uu in。如果您只需要获取一个,并且只有一个,则可以执行.get()
而不是.filter()
。如果数据库中有多个,但您只想获取一个,则可以.filter(…)[0]
获取第一个。此外,如果希望根据某种排序获得第一个排序,您可以.filter(…).order\u by('sort\u field')[0]