我有這兩個模型。按相關ManyToMany字段的距離排序
class Store(models.Model):
coords = models.PointField(null=True,blank=True)
objects = models.GeoManager()
class Product(models.Model):
stores = models.ManyToManyField(Store, null=True, blank=True)
objects = models.GeoManager()
我想獲得按點距離排序的產品。如果產品中的商店字段是外鍵我會這樣做,它的工作原理。
pnt = GEOSGeometry('POINT(5 23)')
Product.objects.distance(pnt, field_name='stores__coords').order_by('distance')
但由於該領域是它與
ValueError: <django.contrib.gis.db.models.fields.PointField: coords> is not in list
我種的預計,因爲目前還不清楚該商店應使用哪種計算距離打破了多對多場,但沒有任何這樣做的方法。
我需要按特定點距離排列的產品列表。
我也一直有這個困難。也許GeoDjango不可能這樣做?也許你必須爲它創建一個原始的sql? – 2013-04-01 17:06:58
@JoeJ我會發布我做的一個可能的答案,但我不喜歡它。可能原始的SQL可以工作,但我對空間查詢和那個不太舒適。看看答案,看看你的想法。 – manuel 2013-04-03 11:03:39
產品有'ManyToMany'到'Store',但它是有'PointField'的商店。一個產品可以在一個或多個商店... **這是一個商店超過一個商店的距離?**較低?越高 ?所有? – AlvaroAV 2014-06-19 11:18:39