Я борюсь со сложными вопросами Django, главным образом потому, что я пытаюсь сделать что-то, что может быть сложным.geodjango foreignkey by distance
В принципе, я получил это:
models.py:
from django.contrib.gis.db import models
class Show(models.Model):
name = models.CharField()
class Venue(models.Models):
name = models.CharField()
coords = models.PointField()
objects = models.GeoManager()
class Representation(models.Model):
datetime = models.DateTimeField()
venue = models.ForeignKey(Venue)
show = models.ForeignKey(Show)
Теперь, что я хочу сделать, это, получить 5 входящих шоу, которые близки к пользователю (user.geoloc является точка). Одна из сложнейших вещей заключается в том, что некоторые из моих пользователей могут жить в области, где нет места, и мое решение просто, если поблизости недостаточно шоу, чтобы искать в большей области.
view.py:
from django.contrib.gis.measure import D
DISTANCE_CLOSE = 1000 #arbitrary number
## this thing is not working, because it's not how it should be done
## but the logic is clearer in this
def get_nearest_shows_not_working(request):
list_shows = {}
while len(list_shows<5)
list_shows = Show.representation_set.filter(venue__coords__distance_lte=(user.geoloc, D(m=DISTANCE_CLOSE))).order_by('datetime'):[5]
DISTANCE_CLOSE = int(DISTANCE_CLOSE*1.2)
return render(request, 'template.html', locals())
def get_nearest_shows_ducktape(request):
list_shows = set()
while len(list_show) < 5:
list_rep = Representation.objects.filter(venue__coords__distance_lte=(user.geoloc, D(m=DISTANCE_CLOSE))).order_by('datetime')
for rep in list_rep:
list_shows.add(rep.show)
DISTANCE_CLOSE = int(DISTANCE_CLOSE*1.2)
list_shows = list_shows[:5]
return render(request, 'template.html', locals())
Что мне не хватает? в Python, есть один и единственный правильный способ сделать что-то, и здесь я просто возился со сложными вещами, для меня это выглядит неприлично.