我有这两个模型。按相关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