Skip to content

Commit cae97cb

Browse files
committed
fix: Django 1.11 compatibility
1 parent 4ee4e98 commit cae97cb

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

.travis.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ matrix:
7575
env: DJANGO_VERSION=dev DATABASE=sqlite
7676
- python: 3.5
7777
env: DJANGO_VERSION=dev DATABASE=postgres
78+
- python: 3.6
79+
env: DJANGO_VERSION=dev DATABASE=sqlite
80+
- python: 3.6
81+
env: DJANGO_VERSION=dev DATABASE=postgres
7882

7983
before_install:
8084
- sudo apt-get update

leaflet/forms/widgets.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# -*- coding: utf-8 -*-
22
from __future__ import unicode_literals
3+
from distutils.version import LooseVersion
34

5+
from django import get_version
46
from django import forms
57
from django.core import validators
68
from django.template.defaultfilters import slugify
@@ -36,11 +38,9 @@ def media(self):
3638
def serialize(self, value):
3739
return value.geojson if value else ''
3840

39-
def render(self, name, value, attrs=None):
41+
def _get_attrs(self, name, attrs=None):
4042
assert self.map_srid == 4326, 'Leaflet vectors should be decimal degrees.'
4143

42-
value = None if value in validators.EMPTY_VALUES else value
43-
4444
# Retrieve params from Field init (if any)
4545
self.geom_type = self.attrs.get('geom_type', self.geom_type)
4646
self.settings_overrides = self.attrs.get('settings_overrides', self.settings_overrides)
@@ -68,4 +68,17 @@ def render(self, name, value, attrs=None):
6868
settings_overrides=attrs.get('settings_overrides', getattr(self, 'settings_overrides', None)),
6969
geometry_field_class=attrs.get('geometry_field_class', getattr(self, 'geometry_field_class', 'L.GeometryField')),
7070
field_store_class=attrs.get('field_store_class', getattr(self, 'field_store_class', 'L.FieldStore')))
71-
return super(LeafletWidget, self).render(name, value, attrs)
71+
return attrs
72+
73+
# Django 1.11 changed how the widgets are rendered
74+
if LooseVersion(get_version()) >= LooseVersion('1.11'):
75+
def get_context(self, name, value, attrs):
76+
value = None if value in validators.EMPTY_VALUES else value
77+
context = super(LeafletWidget, self).get_context(name, value, attrs)
78+
context.update(self._get_attrs(name, attrs))
79+
return context
80+
else:
81+
def render(self, name, value, attrs=None):
82+
attrs = self._get_attrs(name, attrs)
83+
value = None if value in validators.EMPTY_VALUES else value
84+
return super(LeafletWidget, self).render(name, value, attrs)

0 commit comments

Comments
 (0)