elements inside a
pre code {
padding: unset;
}
+
+// Use an icon instead of Tabler's native "caret" for dropdowns (avoids a Safari bug)
+.dropdown-toggle:after{
+ font-family: "Material Design Icons";
+ content: '\F0140';
+ padding-right: 9px;
+ border-bottom: none;
+ border-left: none;
+ transform: none;
+ vertical-align: .05em;
+ height: auto;
+}
diff --git a/netbox/utilities/permissions.py b/netbox/utilities/permissions.py
index 893cc619e..ba245dae1 100644
--- a/netbox/utilities/permissions.py
+++ b/netbox/utilities/permissions.py
@@ -1,7 +1,10 @@
from django.conf import settings
+from django.apps import apps
from django.db.models import Q
from django.utils.translation import gettext_lazy as _
+from users.constants import CONSTRAINT_TOKEN_USER
+
__all__ = (
'get_permission_for_model',
'permission_is_exempt',
@@ -90,6 +93,11 @@ def qs_filter_from_constraints(constraints, tokens=None):
if tokens is None:
tokens = {}
+ User = apps.get_model('users.User')
+ for token, value in tokens.items():
+ if token == CONSTRAINT_TOKEN_USER and isinstance(value, User):
+ tokens[token] = value.id
+
def _replace_tokens(value, tokens):
if type(value) is list:
return list(map(lambda v: tokens.get(v, v), value))
diff --git a/netbox/utilities/templatetags/builtins/filters.py b/netbox/utilities/templatetags/builtins/filters.py
index 738b9a23e..b1c8c524b 100644
--- a/netbox/utilities/templatetags/builtins/filters.py
+++ b/netbox/utilities/templatetags/builtins/filters.py
@@ -8,6 +8,7 @@ from django.contrib.contenttypes.models import ContentType
from django.contrib.humanize.templatetags.humanize import naturalday, naturaltime
from django.utils.html import escape
from django.utils.safestring import mark_safe
+from django.utils.timezone import localtime
from markdown import markdown
from markdown.extensions.tables import TableExtension
@@ -218,7 +219,8 @@ def isodate(value):
text = value.isoformat()
return mark_safe(f'{text}')
elif type(value) is datetime.datetime:
- text = value.date().isoformat()
+ local_value = localtime(value) if value.tzinfo else value
+ text = local_value.date().isoformat()
return mark_safe(f'{text}')
else:
return ''
@@ -229,7 +231,8 @@ def isotime(value, spec='seconds'):
if type(value) is datetime.time:
return value.isoformat(timespec=spec)
if type(value) is datetime.datetime:
- return value.time().isoformat(timespec=spec)
+ local_value = localtime(value) if value.tzinfo else value
+ return local_value.time().isoformat(timespec=spec)
return ''