diff --git a/djadmin/models.py b/djadmin/models.py index 2e0d2af..7a8186b 100644 --- a/djadmin/models.py +++ b/djadmin/models.py @@ -20,7 +20,7 @@ class Visitor(models.Model): """ It will store information about user when logged in using django admin """ - name = models.ForeignKey(AUTH_USER_MODEL, verbose_name=_('User'), null=True) + name = models.ForeignKey(AUTH_USER_MODEL, verbose_name=_('User'), null=True, on_delete=models.CASCADE) city = models.CharField(_('City'), max_length=255, null=True) state = models.CharField(_('State'), max_length=50, null=True) country = models.CharField(_('Country'), max_length=50, null=True) @@ -136,7 +136,8 @@ class DjadminModelSetting(models.Model): verbose_name=_('Date Hierarchy'), help_text=_("Set date_hierarchy to the name of a DateField or DateTimeField" " in your model, and the change list page will include a date-based" - " drilldown navigation by that field.")) + " drilldown navigation by that field."), + on_delete=models.CASCADE) actions_on_top = models.BooleanField(_('Actions on Top'), default=True, @@ -168,7 +169,7 @@ class DjadminCard(models.Model): (LIST_PAGE, _('LIST PAGE')), (FORM_PAGE, _('FORM PAGE')), ) - model = models.ForeignKey(DjadminModelSetting) + model = models.ForeignKey(DjadminModelSetting, on_delete=models.CASCADE) name = models.CharField(_('Name of Card'), max_length=255) html = models.TextField(_('HTML Code')) location = models.SmallIntegerField(_('Select Location'), @@ -192,7 +193,7 @@ class Sortable(models.Model): But It will store when admin change any row, Otherwise it will not store default changelist row's pk. It also provide reset to sortable from icon in table head tag. """ - model = models.ForeignKey(ContentType, verbose_name=_('Model')) + model = models.ForeignKey(ContentType, verbose_name=_('Model'), on_delete=models.CASCADE) sort_array = models.TextField(_('Model Sortable Array')) class Meta: diff --git a/djadmin/sidebar.py b/djadmin/sidebar.py index 57b1373..7ec3a71 100644 --- a/djadmin/sidebar.py +++ b/djadmin/sidebar.py @@ -5,7 +5,7 @@ from django.apps import apps from django.contrib import admin from django.core.exceptions import PermissionDenied -from django.core.urlresolvers import NoReverseMatch, reverse +from django.urls import NoReverseMatch, reverse from django.utils.text import capfirst diff --git a/djadmin/templatetags/custom.py b/djadmin/templatetags/custom.py index 6ee8340..3cd8e9d 100644 --- a/djadmin/templatetags/custom.py +++ b/djadmin/templatetags/custom.py @@ -10,7 +10,7 @@ from django.conf import settings, global_settings from django.contrib.admin.models import LogEntry from django.contrib.contenttypes.models import ContentType -from django.core.urlresolvers import Resolver404, resolve, reverse, NoReverseMatch +from django.urls import Resolver404, resolve, reverse, NoReverseMatch from django.db.models import Q from django.template import TemplateSyntaxError from django.templatetags.i18n import GetAvailableLanguagesNode @@ -25,7 +25,7 @@ CL_VALUE_RE = re.compile('value="([\\d-]+)"') if django.VERSION >= (1, 9): - from django.core.urlresolvers import translate_url + from django.urls import translate_url else: from django.utils.six.moves.urllib.parse import urlsplit, urlunsplit @@ -60,13 +60,13 @@ def cal_total(app_label, model_name): return data.objects.all().count() -@register.assignment_tag +@register.simple_tag def visitors(): visitor = Visitor.objects.all().order_by('-visit_datetime')[:10] return visitor -@register.assignment_tag +@register.simple_tag def calc_visitors(): visit = Visitor.objects.all() pc = visit.filter(device_type="PC").count() @@ -78,7 +78,7 @@ def calc_visitors(): return {'pc': pc, 'mobile': mobile, 'tablet': tablet, 'unknown': unknown} -@register.assignment_tag +@register.simple_tag def next_prev(model): next = None prev = None @@ -92,12 +92,12 @@ def next_prev(model): return {'next': next, 'prev': prev} -@register.assignment_tag +@register.simple_tag def admin_color_theme(): return get_admin_color_theme(djadmin_settings.ADMIN_COLOR_THEME) -@register.assignment_tag +@register.simple_tag def history_of_app(app_label, user): models = ContentType.objects.filter(app_label=app_label).select_related() q = Q() @@ -109,21 +109,28 @@ def history_of_app(app_label, user): return log_list -@register.assignment_tag +@register.simple_tag def get_site_header(): return djadmin_settings.ADMIN_HEADER_TITLE -@register.assignment_tag +@register.simple_tag def get_file_detail(adminform, field): field_data = adminform.form.initial[field] field_name = type(field_data).__name__ try: if field_name == 'ImageFieldFile': + if not bool(field_data): + return { + 'type': 'image', 'width': 0, 'height': 0, 'url': '', + 'size': 0, 'extension': '' + } filename, file_extension = os.path.splitext(field_data.url) return {'type': 'image', 'width': field_data.width, 'height': field_data.height, 'url': field_data.url, 'size': field_data.size, 'extension': file_extension} if field_name == 'FieldFile': + if not bool(field_data): + return {'type': 'file', 'url': '', 'size': 0, 'extension': ''} filename, file_extension = os.path.splitext(field_data.url) return {'type': 'file', 'url': field_data.url, 'size': field_data.size, 'extension': file_extension} return field @@ -146,7 +153,7 @@ def get_user_define_available_languages(parser, token): return EmptyNode() -@register.assignment_tag +@register.simple_tag def get_pk(model, app_label): pk = 0 try: diff --git a/djadmin/templatetags/djadmin.py b/djadmin/templatetags/djadmin.py index a11deac..2cb93c9 100644 --- a/djadmin/templatetags/djadmin.py +++ b/djadmin/templatetags/djadmin.py @@ -5,7 +5,7 @@ from django.contrib.admin.templatetags.admin_list import (result_headers, result_hidden_fields, results) -from django.core.urlresolvers import reverse +from django.urls import reverse from django.template import Library from .base import AdminReadonlyField, Inline @@ -31,7 +31,7 @@ def get_admin_site(): site = get_admin_site() -@register.assignment_tag +@register.simple_tag def fieldset_layout(adminform, inline_admin_formsets): layout = getattr(adminform.model_admin, 'layout', None) if layout is not None: diff --git a/djadmin/views.py b/djadmin/views.py index a279d5f..f3966a6 100644 --- a/djadmin/views.py +++ b/djadmin/views.py @@ -7,7 +7,7 @@ import pip from django.contrib.admin.sites import AdminSite from django.contrib.contenttypes.models import ContentType -from django.core.urlresolvers import reverse +from django.urls import reverse from django.http import JsonResponse from django.shortcuts import render, redirect from django.utils.translation import ugettext as _ diff --git a/tests/tests.py b/tests/tests.py index c384a13..ba4699d 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.core.urlresolvers import reverse +from django.urls import reverse from django.test import TestCase from django.test.client import Client