2011-11-21 287 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]