diff --git a/fancytree/widgets.py b/fancytree/widgets.py index 0ac39bd..683cb0f 100644 --- a/fancytree/widgets.py +++ b/fancytree/widgets.py @@ -1,3 +1,4 @@ +from collections import ChainMap from itertools import chain from django import forms @@ -6,7 +7,7 @@ from django.utils.encoding import force_text from django.utils.html import conditional_escape from django.utils.safestring import mark_safe -from django.utils.datastructures import MultiValueDict, MergeDict +from django.utils.datastructures import MultiValueDict from mptt.templatetags.mptt_tags import cache_tree_children try: @@ -21,7 +22,7 @@ def get_doc(node, values): if hasattr(node, "name"): name = node.name else: - name = unicode(node) + name = str(node) doc = {"title": name, "key": node.pk} if str(node.pk) in values: doc['selected'] = True @@ -51,17 +52,17 @@ def __init__(self, attrs=None, choices=(), queryset=None, select_mode=2): self.choices = list(choices) def value_from_datadict(self, data, files, name): - if isinstance(data, (MultiValueDict, MergeDict)) and self.select_mode != 1: + if isinstance(data, (MultiValueDict, ChainMap)) and self.select_mode != 1: return data.getlist(name) return data.get(name, None) - def render(self, name, value, attrs=None, choices=()): + def render(self, name, value, attrs=None, choices=(), renderer=None): if value is None: value = [] if not isinstance(value, (list, tuple)): value = [value] has_id = attrs and 'id' in attrs - final_attrs = self.build_attrs(attrs, name=name) + final_attrs = self.build_attrs(attrs, {"name": name}) if has_id: output = [u'
' % attrs['id']] id_attr = u' id="%s_checkboxes"' % (attrs['id']) diff --git a/treewidget/apps/categories/migrations/0001_initial.py b/treewidget/apps/categories/migrations/0001_initial.py index 7b9d5a2..a1263d9 100644 --- a/treewidget/apps/categories/migrations/0001_initial.py +++ b/treewidget/apps/categories/migrations/0001_initial.py @@ -16,13 +16,13 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(max_length=50)), - ('slug', django_extensions.db.fields.AutoSlugField(editable=False, populate_from=b'name', blank=True, overwrite=True)), + ('slug', django_extensions.db.fields.AutoSlugField(editable=False, populate_from='name', blank=True, overwrite=True)), ('url', models.TextField(editable=False)), ('lft', models.PositiveIntegerField(editable=False, db_index=True)), ('rght', models.PositiveIntegerField(editable=False, db_index=True)), ('tree_id', models.PositiveIntegerField(editable=False, db_index=True)), ('level', models.PositiveIntegerField(editable=False, db_index=True)), - ('parent', models.ForeignKey(related_name='children', blank=True, to='categories.Category', null=True)), + ('parent', models.ForeignKey(related_name='children', blank=True, to='categories.Category', null=True, on_delete=models.CASCADE)), ], options={ 'ordering': ('tree_id', 'lft'), diff --git a/treewidget/apps/categories/models.py b/treewidget/apps/categories/models.py index bc5714c..7fc7585 100644 --- a/treewidget/apps/categories/models.py +++ b/treewidget/apps/categories/models.py @@ -1,15 +1,16 @@ from django.db import models -from django.core.urlresolvers import reverse +from django.urls import reverse from django_extensions.db.fields import AutoSlugField import mptt -from urlparse import urljoin +from urllib.parse import urljoin class Category(models.Model): parent = models.ForeignKey('self', null=True, blank=True, - related_name='children') + related_name='children', + on_delete=models.CASCADE) name = models.CharField(max_length=50) slug = AutoSlugField(max_length=50, overwrite=True, diff --git a/treewidget/settings.py b/treewidget/settings.py index 7bf2751..4d8bb5b 100644 --- a/treewidget/settings.py +++ b/treewidget/settings.py @@ -97,7 +97,7 @@ # 'django.template.loaders.eggs.Loader', ) -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', @@ -116,12 +116,23 @@ ROOT_URLCONF = 'urls' -TEMPLATE_DIRS = ( - # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". - # Always use forward slashes, even on Windows. - # Don't forget to use absolute paths, not relative paths. - os.path.join(PROJECT_ROOT, 'templates'), -) +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [ + os.path.join(PROJECT_ROOT, 'templates'), + ], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] INSTALLED_APPS = ( 'django.contrib.auth', diff --git a/treewidget/urls.py b/treewidget/urls.py index 91aedc9..60d8959 100644 --- a/treewidget/urls.py +++ b/treewidget/urls.py @@ -1,24 +1,12 @@ -from django.conf.urls import patterns, include, url - from django.contrib import admin -admin.autodiscover() - -urlpatterns = patterns('', - url(r'^$', 'views.home', name='home'), - url(r'^selection/(?P