django - Error with GeoDjango serializer and ForeignKey field -


i have problem django 1.5.4. put question in stackoverflow instead of https://gis.stackexchange.com/ because i'm 100% sure not gis related problem.

here set up:

my models.py

from django.contrib.auth.models import user django.contrib.gis.db import models gismodels  # this models region of interest, using polygon class roi(gismodels.model):     label = models.charfield(max_length=256, default='roi')     area = models.floatfield(default=0.0)     geom = gismodels.polygonfield(srid=4326)     when = models.datetimefield(default=datetime.now())     user = models.foreignkey(user, null=true)      objects = gismodels.geomanager()      def __unicode__(self):         return unicode(self.label)      class meta:         ordering = ['when']   class indicator(models.model):     name = models.textfield()     color = models.textfield()     measurement_units = models.charfield(max_length=100)     algorithm = models.charfield(max_length=256)     data_origin = models.textfield()   class series(models.model):     roi = models.foreignkey(roi)     indicator = models.foreignkey(indicator) 

as can see, series model contains reference roi model

my settings.py

serialization_modules = {     'geojson': 'djgeojson.serializers' } 

i'm using django-geojson serialize roi objects geojson. want use serializer send geojson clients. so, views.py looks this

my views.py

@login_required def get_rois(request):     rois_query = roi.objects.filter(user=request.user)      polygons = json.loads(serializers.serialize('geojson', rois_query))      return httpresponse(json.dumps(polygons), mimetype='application/json') 

the problem: i'm getting error in serialize call

attributeerror: 'roi' object has no attribute 'roi' 

the relevant part of error stack this

file "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/django/core/serializers/__init__.py", line 122, in serialize     s.serialize(queryset, **options)   file "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/djgeojson/serializers.py", line 349, in serialize     self.serialize_queryset(queryset)   file "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/djgeojson/serializers.py", line 321, in serialize_queryset     self.handle_reverse_field(obj, field, field_name)   file "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/djgeojson/serializers.py", line 243, in handle_reverse_field     values = [reverse_value(related) related in getattr(obj, field_name).iterator()] 

looking @ stack, looks there's problem resolving reverse reference of roi series. series has roi field pointing roi, , think serializer thinks roi field belongs roi class (incorrect) instead of series (correct). expression infinite loop comes mind.

besides, if delete roi field series model class, works

i'm not sure if it's bug of django-geojson plugin (using last version) or wrong code (most likely). i've tried default json serializer, , still getting same error. , tried inherit model classes gismodels instead of models. no effect.

any clues?

ok, managed solve it. looks there bug in django-geojson plugin. can't handle backward relations. so, told django avoid backward relation creation between roi , series

class series(gismodels.model):     # prevents django create backwards relation between roi , series     roi = models.foreignkey(roi, related_name='+')     indicator = models.foreignkey(indicator) 

Comments

Popular posts from this blog

PHPMotion implementation - URL based videos (Hosted on separate location) -

javascript - Using Windows Media Player as video fallback for video tag -

c# - Unity IoC Lifetime per HttpRequest for UserStore -