【问题标题】:Query of a subquery in DjangoDjango中子查询的查询
【发布时间】:2011-11-21 19:36:15
【问题描述】:

我正在尝试从另一个查询中进行查询,但 Django 说:“渲染时捕获数据库错误:子查询返回超过 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)

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    我相信你会想要使用in 来过滤第二个查询集

    near_coordinates = Place.objects.filter(coordinate__distance_lte=(place_obj.coordinate, D(km=100)))
    near_places = TranslatedPlace.objects.filter(place__in=near_coordinates)
    

    【讨论】:

      【解决方案2】:

      如果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]

      【讨论】:

        猜你喜欢
        • 2014-09-04
        • 2017-07-01
        • 2018-11-18
        • 1970-01-01
        • 2021-06-01
        • 2020-04-04
        • 2018-06-10
        • 1970-01-01
        • 2012-01-23
        相关资源
        最近更新 更多