【发布时间】:2018-05-01 03:11:38
【问题描述】:
我有两个型号Shop 和Address。
店铺Model:
class Shop(BaseModel):
name = models.CharField(
max_length=100,
blank=True,
null=True
)
address = models.ForeignKey(
Address,
blank=True,
null=True,
on_delete=models.SET_NULL
)
objects = LocationManager()
地址Model:
class Address(BaseModel):
latitude = models.DecimalField(
max_digits=16,
decimal_places=14,
blank=True,
null=True
)
longitude = models.DecimalField(
max_digits=16,
decimal_places=14,
blank=True,
null=True
)
status = models.NullBooleanField(null=True)
我已经为 Shop 模型创建了一个自定义管理器
class LocationManager(models.Manager):
def nearby(self, latitude, longitude, proximity):
"""
Return all object which distance to specified coordinates
is less than proximity given in kilometers
"""
# Great circle distance formula
# acos will not work in sqlite
gcd = """
6371 * acos(
cos(radians(%s)) * cos(radians(latitude))
* cos(radians(longitude) - radians(%s)) +
sin(radians(%s)) * sin(radians(latitude))
)
"""
queryset = self.get_queryset().select_related(
'address'
).exclude(
latitude=None
)
.exclude(
longitude=None
)
.annotate(
distance=RawSQL(
gcd,
(
latitude,
longitude,
latitude
)
)
).filter(
distance__lt=proximity
).order_by('distance')
return queryset
现在我想使用自定义管理器查找附近的商店:
Shop.objects.nearby(13.244334,72.329832,20)
但我收到此错误:
Cannot resolve keyword 'latitude' into field. Choices are: address, address_id, name
如何使用通过latitude 过滤我的查询集来查找附近的商店?
【问题讨论】:
标签: django django-models django-orm django-managers