[英]How to filter a django queryset based on Location coordinates?
假設我有一個照片模型。 在照片模型中,我的照片模型中有經度和緯度字段。
class Photo(models.Model):
photographer = models.ForeignKey(Photographer, related_name = 'shot_owner')
title = models.CharField(max_length=140, blank=True)
description = models.CharField(max_length, blank=True)
longitude = models.DecimalField(max_digits=16, decimal_places = 14, null=True, blank=True)
latitude = models.DecimalField(max_digits=16, decimal_places = 14, null=True, blank=True)
我使用Django Tastypie作為我的其余框架。 假設某個用戶決定要查看10公里半徑內的所有照片。 一個人怎么能做到這一點? 這是我的以下資源:
class PhotosNearMe(ModelResource):
photographer = fields.ForeignKey(PhotographerResource, 'photographer', full=True)
class Meta:
queryset = Photo.objects.all()
resource_name = 'photos-near-me'
fields = ['id', 'title', 'description', 'latitude','longitude','photographer']
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
serializer = Serializer(formats=['json'])
include_resource_uri = False
filtering = {
'photographer' : ALL_WITH_RELATIONS,
}
def get_object_list(self, request):
return super(PhotosNearMe, self).get_object_list(request).filter(....)
這是我遇到麻煩的地方。 如前所述,用戶可以向我發送他們的坐標,然后我可以保存它們。 就像是:
lati = bundle.obj.latitude
longi = bundle.obj.longitude
稍后,我可以使用lat和long來過濾數據庫中半徑10 km以內的所有圖像。 問題是,如何? 我想按某種范圍進行過濾嗎?
編輯**
我找到了可能可以使用的東西, 在給定坐標的一定范圍內查找項目
無論如何,我可以實現嗎?
如果您要處理大量本質上是地理的數據,則可以考慮使用GeoDjango,它支持空間查找 。 但是,它僅適用於某些后端,因此如果您的堆棧不符合要求,則可能需要進行大量設置。
否則,另一個選擇是做一些幾何圖形,然后計算出您的點周圍的邊界圓,然后對其進行過濾。 這是一個示例 ,看來還有很多其他有關如何執行此操作的文章。
編輯:針對您關於如何執行此操作的問題,我假設您是指第二部分。 我不是TastyPie的專家,但是看來您將不得不這樣做:
似乎所有這些都屬於ModelResource.build_filters 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.