python - Get related location field with GeoDjango -


i'm working on little application uses geodjango find gigs @ venues nearby. here's models.py:

from django.contrib.gis.db import models  class venue(models.model):     """     model venue     """     name = models.charfield(max_length=200)     location = models.pointfield()      def __str__(self):         return self.name   class event(models.model):     """     model event     """     name = models.charfield(max_length=200)     datetime = models.datetimefield()     venue = models.foreignkey(venue)      def __str__(self):         return "%s - %s" % (self.name, self.venue.name) 

now, i've managed lookup, , looks me need serialize response geojson in order render on map. however, i'm struggling done. here's current views.py:

from django.shortcuts import render_to_response django.views.generic.edit import formview gigs.forms import lookupform gigs.models import event django.utils import timezone django.contrib.gis.geos import point django.contrib.gis.db.models.functions import distance django.template import requestcontext  class lookupview(formview):     form_class = lookupform      def get(self, request):         return render_to_response('gigs/lookup.html', requestcontext(request))      def form_valid(self, form):         # data         latitude = form.cleaned_data['latitude']         longitude = form.cleaned_data['longitude']          # get next week's date         next_week = timezone.now() + timezone.timedelta(weeks=1)          # get point         location = point(latitude, longitude, srid=4326)          # look events         events = event.objects.filter(datetime__lte=next_week).annotate(distance=distance('venue__location', location)).order_by('distance')[0:5]          # render template         return render_to_response('gigs/lookupresults.html', {             'events': events             }) 

if insert breakpoint after events:

ipdb> gigs.models import venue ipdb> django.core.serializers import serialize ipdb> venues = venue.objects.all() ipdb> serialize('geojson', venues, geometry_field='location', fields=('name',)) '{"type": "featurecollection", "crs": {"type": "name", "properties": {"name": "epsg:4326"}}, "features": [{"type": "feature", "geometry": {"type": "point", "coordinates": [77.13845850820013, 88.27032065635657]}, "properties": {"name": "venue1"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [-144.48274402224723, -35.87841402981486]}, "properties": {"name": "venue2"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [15.249714163005194, -39.942840871151624]}, "properties": {"name": "venue3"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [-63.376261279235095, -6.222101297964656]}, "properties": {"name": "venue4"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [153.29028611820962, -4.285826286375041]}, "properties": {"name": "venue5"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [-146.08227004805758, 42.4843671723977]}, "properties": {"name": "venue6"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [149.6004493621263, 34.740389078323844]}, "properties": {"name": "venue7"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [-144.38342519084884, -55.55425529324768]}, "properties": {"name": "venue8"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [83.32120247931198, 48.78215628903402]}, "properties": {"name": "venue9"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [-28.108531225500826, 35.50271671578547]}, "properties": {"name": "venue10"}}]}' ipdb> serialize('geojson', events, geometry_field='venue__location', fields=('name',)) '{"type": "featurecollection", "crs": {"type": "name", "properties": {"name": "epsg:4326"}}, "features": [{"type": "feature", "geometry": null, "properties": {"name": "event3"}}, {"type": "feature", "geometry": null, "properties": {"name": "event9"}}, {"type": "feature", "geometry": null, "properties": {"name": "event10"}}, {"type": "feature", "geometry": null, "properties": {"name": "event1"}}, {"type": "feature", "geometry": null, "properties": {"name": "event7"}}]}' 

i can locations list of venues, doesn't seem work getting location venue event model.

any idea went wrong?

hope doesn't come late, answer don't need serialize geojson render map. use if wanted there plenty of other ways.

for example, make json array each element lat,lng coordinate pair , javascript can iterate through same , add map.


Comments