Запрос подзапроса в Джанго - PullRequest
3 голосов
/ 21 ноября 2011

Я пытаюсь выполнить запрос из другого запроса, но 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)

Ответы [ 2 ]

6 голосов
/ 21 ноября 2011

Полагаю, вы захотите использовать в для фильтрации второго набора запросов

near_coordinates = Place.objects.filter(coordinate__distance_lte=(place_obj.coordinate, D(km=100)))
near_places = TranslatedPlace.objects.filter(place__in=near_coordinates)
3 голосов
/ 21 ноября 2011

Если 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], если хотите получить первый, основанный на некоторой сортировке.

...