Skip to content

Commit 6f86a4a

Browse files
committed
Merge branch 'release/2.1.0'
2 parents 4625ddb + 1791389 commit 6f86a4a

File tree

34 files changed

+15907
-1708
lines changed

34 files changed

+15907
-1708
lines changed

.gitattributes

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
*.html linguist-language=python
2-
*.js linguist-language=python
2+
*.js linguist-language=python
3+
*.css linguist-language=python

adminlteui/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
version = '2.0.0'
1+
version = '2.1.0'
22
default_app_config = 'adminlteui.apps.AdminlteUIConfig'

adminlteui/admin.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,17 @@ class ModelAdmin(admin.ModelAdmin):
77

88
class Media:
99
css = {
10-
"all": ("admin/components/select2/dist/css/select2.min.css",)
10+
"all": (
11+
"admin/components/select2/dist/css/select2.min.css",
12+
# for daterangefilter
13+
"admin/components/bootstrap-daterangepicker/daterangepicker.css"
14+
)
1115
}
1216
js = (
1317
"admin/components/select2/dist/js/select2.min.js",
18+
# for daterangefilter
19+
"admin/components/moment/moment-with-locales.min.js",
20+
"admin/components/bootstrap-daterangepicker/daterangepicker.js",
1421
)
1522

1623
def changelist_view(self, request, extra_context=None):

adminlteui/core.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ def make(self, request, models=None, deep=1, deep_limit=0):
3939
menu_item['url'] = model.get('admin_url')
4040
elif self.menu_type == 'link':
4141
menu_item['url'] = self.url
42+
# check permissions when permissions are not None
43+
if self.permissions:
44+
if request.user.has_perms(self.permissions) is False:
45+
return None
4246
else:
4347
# menu_type: group and child is empty will hide the menu
4448
if not self.child:
@@ -51,9 +55,14 @@ def make(self, request, models=None, deep=1, deep_limit=0):
5155
menu_item['target_blank'] = self.target_blank
5256
menu_item['menu_type'] = self.menu_type or 'group'
5357

58+
if menu_item['menu_type'] != 'group':
59+
if menu_item['url'] == request.path:
60+
menu_item['active'] = True
61+
5462
if self.child:
5563
if deep_limit == 0 or deep <= deep_limit:
5664
child_list = []
65+
has_child_active = False
5766
for child in self.child:
5867
deep += 1
5968
child_menu = child.make(request, models, deep, deep_limit)
@@ -62,8 +71,13 @@ def make(self, request, models=None, deep=1, deep_limit=0):
6271
if child_menu.get('menu_type', 'group') == 'group':
6372
if len(child_menu.get('child')) == 0:
6473
continue
74+
if child_menu.get('active') is True:
75+
has_child_active = True
76+
6577
child_list.append(child_menu)
6678
menu_item['child'] = child_list
79+
if has_child_active is True:
80+
menu_item['active'] = True
6781
else:
6882
return None
6983
return menu_item

adminlteui/filters.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import datetime
2+
3+
from django.contrib import admin, messages
4+
from django.db import models
5+
from django.conf import settings
6+
from django.utils import timezone
7+
from django.utils.translation import gettext_lazy as _
8+
9+
10+
class DateRangeFilter(admin.FieldListFilter):
11+
# Reference https://github.com/andreynovikov/django-daterangefilter
12+
template = 'adminlte/date_range_filter.html'
13+
date_format = 'YYYY/MM/DD'
14+
15+
def __init__(self, field, request, params, model, model_admin, field_path):
16+
self.field_name = field_path
17+
self.lookup_kwarg_gte = '{}__gte'.format(field_path)
18+
self.lookup_kwarg_lte = '{}__lte'.format(field_path)
19+
self.lookup_gte = params.get(self.lookup_kwarg_gte)
20+
self.lookup_lte = params.get(self.lookup_kwarg_lte)
21+
22+
if self.lookup_gte == '':
23+
params.pop(self.lookup_kwarg_gte)
24+
25+
if self.lookup_lte == '':
26+
params.pop(self.lookup_kwarg_lte)
27+
if self.lookup_gte and self.lookup_lte:
28+
self.lookup_val = '{} - {}'.format(self.lookup_gte, self.lookup_lte)
29+
# if we are filtering DateTimeField we should add one day to final date
30+
if "__" in field_path:
31+
related_model, field = field_path.split("__")
32+
field = model._meta.get_field(related_model).related_model._meta.get_field(field)
33+
else:
34+
field = model._meta.get_field(field_path)
35+
36+
if isinstance(field, models.DateTimeField):
37+
try:
38+
gte_date = datetime.datetime.strptime(self.lookup_gte, '%Y-%m-%d')
39+
lte_date = datetime.datetime.strptime(self.lookup_lte, '%Y-%m-%d')
40+
lte_date = lte_date + datetime.timedelta(seconds=3600 * 24 - 1)
41+
if settings.USE_TZ:
42+
gte_date = timezone.make_aware(gte_date, timezone.get_current_timezone())
43+
lte_date = timezone.make_aware(lte_date, timezone.get_current_timezone())
44+
params[self.lookup_kwarg_gte] = gte_date.strftime('%Y-%m-%d %H:%M:%S%z')
45+
params[self.lookup_kwarg_lte] = lte_date.strftime('%Y-%m-%d %H:%M:%S%z')
46+
except ValueError:
47+
messages.add_message(request, messages.ERROR,
48+
_("Invalid date for '%(field_name)s' field range filter") % {
49+
'field_name': field.verbose_name})
50+
else:
51+
self.lookup_val = ''
52+
53+
super().__init__(field, request, params, model, model_admin, field_path)
54+
55+
def choices(self, changelist):
56+
yield {
57+
'field_name': self.field_path,
58+
'value': self.lookup_val,
59+
'date_format': self.date_format,
60+
'query_string': changelist.get_query_string(remove=self._get_expected_fields())
61+
}
62+
63+
def expected_parameters(self):
64+
return self._get_expected_fields()
65+
66+
def _get_expected_fields(self):
67+
return [self.lookup_kwarg_gte, self.lookup_kwarg_lte]
-3.89 KB
Binary file not shown.

0 commit comments

Comments
 (0)