2021-10-09 18:10:14 +00:00
|
|
|
from adminsortable2.admin import SortableInlineAdminMixin
|
|
|
|
from django.contrib import admin
|
|
|
|
from django.utils.html import format_html
|
2022-07-21 19:34:21 +00:00
|
|
|
from django.utils.translation import gettext_lazy as _
|
2020-10-16 18:20:18 +00:00
|
|
|
from reversion_compare.admin import CompareVersionAdmin
|
|
|
|
|
2021-10-09 18:10:14 +00:00
|
|
|
from inventory.forms import OnlyUserRelationsModelForm
|
|
|
|
|
|
|
|
|
|
|
|
class UserInlineMixin:
|
|
|
|
def get_queryset(self, request):
|
|
|
|
qs = super().get_queryset(request)
|
|
|
|
|
|
|
|
if not request.user.is_superuser:
|
|
|
|
# Display only own created entries
|
|
|
|
qs = qs.filter(user=request.user)
|
|
|
|
|
|
|
|
return qs
|
|
|
|
|
2020-10-16 18:20:18 +00:00
|
|
|
|
|
|
|
class BaseUserAdmin(CompareVersionAdmin):
|
2021-10-09 18:10:14 +00:00
|
|
|
form = OnlyUserRelationsModelForm
|
|
|
|
|
2020-10-24 15:15:05 +00:00
|
|
|
def get_changelist(self, request, **kwargs):
|
2021-09-29 17:17:52 +00:00
|
|
|
self.request = request
|
2020-10-24 15:15:05 +00:00
|
|
|
self.user = request.user
|
|
|
|
return super().get_changelist(request, **kwargs)
|
|
|
|
|
2020-10-16 18:20:18 +00:00
|
|
|
def save_model(self, request, obj, form, change):
|
|
|
|
if obj.user_id is None:
|
|
|
|
obj.user = request.user
|
|
|
|
|
|
|
|
super().save_model(request, obj, form, change)
|
2020-12-20 17:45:56 +00:00
|
|
|
|
|
|
|
def get_queryset(self, request):
|
|
|
|
qs = super().get_queryset(request)
|
2021-10-09 18:10:14 +00:00
|
|
|
qs = qs.select_related(
|
|
|
|
'user',
|
|
|
|
)
|
2020-12-20 17:45:56 +00:00
|
|
|
if not request.user.is_superuser:
|
|
|
|
# Display only own created entries
|
|
|
|
qs = qs.filter(user=request.user)
|
|
|
|
|
|
|
|
return qs
|
2021-10-09 18:10:14 +00:00
|
|
|
|
2022-07-28 19:07:21 +00:00
|
|
|
def get_list_filter(self, request):
|
|
|
|
list_filter = self.list_filter
|
|
|
|
|
|
|
|
if request.user.is_superuser:
|
|
|
|
# Superuser sees entries from all users -> Add "By user" filter
|
|
|
|
list_filter = list(list_filter)
|
|
|
|
list_filter.insert(0, 'user')
|
|
|
|
|
|
|
|
return list_filter
|
|
|
|
|
|
|
|
def get_list_display(self, request):
|
|
|
|
list_display = self.list_display
|
|
|
|
|
|
|
|
if request.user.is_superuser:
|
|
|
|
# Superuser sees entries from all users -> Display the user in change list
|
|
|
|
list_display = list(list_display)
|
|
|
|
list_display.insert(0, 'user')
|
|
|
|
|
|
|
|
return list_display
|
|
|
|
|
2021-10-09 18:10:14 +00:00
|
|
|
|
|
|
|
class BaseImageModelInline(UserInlineMixin, SortableInlineAdminMixin, admin.TabularInline):
|
|
|
|
def preview(self, instance):
|
|
|
|
return format_html(
|
|
|
|
(
|
|
|
|
'<a href="{url}" title="{name}"'
|
|
|
|
' target="_blank" class="image_file_input_preview">'
|
|
|
|
'<img style="width:9em;" src="{url}"></a>'
|
|
|
|
),
|
|
|
|
url=instance.image.url,
|
|
|
|
name=instance.name,
|
|
|
|
)
|
2023-07-21 05:50:19 +00:00
|
|
|
|
2021-10-09 18:10:14 +00:00
|
|
|
extra = 0
|
2023-07-21 05:50:19 +00:00
|
|
|
fields = ('position', 'preview', 'image', 'name', 'tags')
|
2021-10-09 18:10:14 +00:00
|
|
|
readonly_fields = ('preview',)
|
|
|
|
|
|
|
|
|
|
|
|
class BaseFileModelInline(UserInlineMixin, SortableInlineAdminMixin, admin.TabularInline):
|
|
|
|
extra = 0
|
2023-07-21 05:50:19 +00:00
|
|
|
fields = ('position', 'file', 'name', 'tags')
|
2022-07-21 19:34:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
class LimitTreeDepthListFilter(admin.SimpleListFilter):
|
|
|
|
title = _('Limit tree depth')
|
|
|
|
parameter_name = 'level'
|
|
|
|
|
|
|
|
def lookups(self, request, model_admin):
|
|
|
|
return (
|
|
|
|
('1', _('Only root')),
|
|
|
|
('2', _('Root + first sub')),
|
|
|
|
('3', _('Root + first + second sub')),
|
|
|
|
)
|
|
|
|
|
|
|
|
def queryset(self, request, queryset):
|
|
|
|
level = self.value()
|
|
|
|
if level:
|
|
|
|
level = int(level)
|
|
|
|
return queryset.filter(level__lte=level)
|