2011-11-21 180 views
3

我试图做从另一个查询的查询,但Django的说的:“抓到DatabaseError同时呈现:子查询返回多个1行。”我正在使用PostGis。查询在Django子查询

我的模型

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) 

回答

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) 
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]