Mam dwa modele.Sortowanie według odległości z powiązanym polem 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()
Chcę, aby produkty były sortowane według odległości do punktu. Jeśli sklepy w produkcie byłyby kluczem zagranicznym, zrobiłbym to i to działa.
pnt = GEOSGeometry('POINT(5 23)')
Product.objects.distance(pnt, field_name='stores__coords').order_by('distance')
Ale ponieważ jest polem ManyToMany zrywa z
ValueError: <django.contrib.gis.db.models.fields.PointField: coords> is not in list
I niby spodziewałem się tego, ponieważ nie jest jasne, które z magazynów należy użyć, aby obliczyć odległość, ale jest jakiś sposób, aby to zrobić.
Potrzebuję listę produktów zamówionych według odległości do określonego punktu.
Mam również tę trudność. Może to nie jest możliwe z GeoDjango? Być może trzeba utworzyć dla niego raw sql? –
@JoeJ Opublikuję to, co zrobiłem jako możliwą odpowiedź, ale nie podoba mi się to. Prawdopodobnie surowy SQL może działać, ale nie jestem zbyt komfortowy z zapytaniami przestrzennymi i tym. Sprawdź odpowiedź i zobacz, co myślisz. – manuel
Produkt ma 'ManyToany' na' Store', ale jest to sklep, który ma 'PointField'. Produkt może znajdować się w co najmniej 1 sklepie ... ** Ile wynosi odległość produktu, który ma więcej niż jeden sklep? ** Czym jest niższy? Im wyżej? Wszystko ? – AlvaroAV