PyInventory/inventory/admin/location.py

79 wiersze
2.6 KiB
Python
Czysty Wina Historia

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from django.conf import settings
from django.contrib import admin
from django.db.models import Count
from django.db.models.options import Options
from django.template.loader import render_to_string
from django.utils.translation import gettext_lazy as _
from import_export.admin import ImportExportMixin
from import_export.resources import ModelResource
from inventory.admin.base import BaseUserAdmin, LimitTreeDepthListFilter
from inventory.models import ItemModel, LocationModel
from inventory.string_utils import ltruncatechars
class LocationModelResource(ModelResource):
class Meta:
model = LocationModel
@admin.register(LocationModel)
class LocationModelAdmin(ImportExportMixin, BaseUserAdmin):
@admin.display(ordering='item_count', description=_('ItemModel.verbose_name_plural'))
def item_count(self, obj):
return obj.item_count
@admin.display(description=_('ItemModel.verbose_name_plural'))
def items(self, obj):
item_qs = ItemModel.objects.filter(location=obj)
opts: Options = ItemModel._meta
context = {
'items': item_qs,
'opts': opts,
}
return render_to_string('admin/location/items.html', context)
@admin.display(ordering='path_str', description=_('LocationModel.verbose_name'))
def location(self, obj):
text = ' '.join(obj.path)
text = ltruncatechars(text, max_length=settings.TREE_PATH_STR_MAX_LENGTH)
return text
def get_queryset(self, request):
qs = super().get_queryset(request)
qs = qs.annotate(item_count=Count('items'))
return qs
list_display = ('location', 'create_dt', 'update_dt', 'item_count')
fieldsets = (
(
_('Internals'),
{
'classes': ('collapse',),
'fields': (
('id', 'version'),
'user',
),
},
),
(_('Meta'), {'classes': ('collapse',), 'fields': ('create_dt', 'update_dt')}),
(
_('Basic'),
{
'fields': (
'name',
'description',
'tags',
'parent',
)
},
),
(_('Items in this Location'), {'fields': ('items',)}),
)
autocomplete_fields = ('parent',)
readonly_fields = ('id', 'create_dt', 'update_dt', 'user', 'item_count', 'items')
list_display_links = ('location',)
list_filter = (LimitTreeDepthListFilter,)
search_fields = ('name', 'description', 'tags__name')
ordering = ('path_str',)