@@ -56,6 +56,14 @@ def hasattr_lazy(obj, name):
5656 return name in dir (obj )
5757
5858
59+ def get_field_remote_field (field ):
60+ """ For Django 1.8/2.0 compatibility """
61+ if django .VERSION < (1 , 9 ):
62+ return field .rel
63+ else :
64+ return field .remote_field
65+
66+
5967class DjangoGeoJSONEncoder (DjangoJSONEncoder ):
6068
6169 def default (self , o ):
@@ -321,17 +329,22 @@ def handle_fk_field(self, obj, field):
321329 if self .use_natural_keys and hasattr (related , 'natural_key' ):
322330 related = related .natural_key ()
323331 else :
324- if field . rel .field_name == related ._meta .pk .name :
332+ if get_field_remote_field ( field ) .field_name == related ._meta .pk .name :
325333 # Related to remote object via primary key
326334 related = related ._get_pk_val ()
327335 else :
328336 # Related to remote object via other field
329- related = smart_text (getattr (related , field . rel .field_name ), strings_only = True )
337+ related = smart_text (getattr (related , get_field_remote_field ( field ) .field_name ), strings_only = True )
330338 self ._current ['properties' ][field .name ] = related
331339
332340 def handle_m2m_field (self , obj , field ):
333- if field .rel .through ._meta .auto_created :
334- if self .use_natural_keys and hasattr (field .rel .to , 'natural_key' ):
341+ if get_field_remote_field (field ).through ._meta .auto_created :
342+ remote_field = get_field_remote_field (field )
343+ if django .VERSION < (1 , 9 ): # Django 1.8/2.0 compatibility
344+ remote_model = remote_field .to
345+ else :
346+ remote_model = remote_field .related_model
347+ if self .use_natural_keys and hasattr (remote_model , 'natural_key' ):
335348 def m2m_value (value ):
336349 return value .natural_key ()
337350 else :
@@ -413,7 +426,7 @@ def serialize_queryset(self, queryset):
413426 continue
414427
415428 if field .serialize or field .primary_key :
416- if field . rel is None :
429+ if get_field_remote_field ( field ) is None :
417430 if self .properties is None or field .attname in self .properties :
418431 self .handle_field (obj , field .name )
419432 else :
@@ -427,7 +440,7 @@ def serialize_queryset(self, queryset):
427440
428441 for field in reversed_fields :
429442 if field .serialize :
430- field_name = field . rel .related_name or opts .object_name .lower ()
443+ field_name = get_field_remote_field ( field ) .related_name or opts .object_name .lower ()
431444 if self .properties is None or field_name in self .properties :
432445 self .handle_reverse_field (obj , field , field_name )
433446 self .end_object (obj )
0 commit comments