from ralph.admin import RalphAdmin, RalphTabularInline, register
from ralph.admin.filters import TextFilter, ChoicesFilter
from ralph.admin.mixins import BulkEditChangeListMixin
from ralph.admin.views.extra import RalphDetailViewAdmin
from ralph.lib.custom_fields.admin import CustomFieldValueAdminMixin
from ralph.lib.transitions.admin import TransitionAdminMixin
from ralph.attachments.admin import AttachmentsMixin
from myapp.models import Asset, AssetComponent
from myapp.resources import AssetResource
class BarcodeFilter(TextFilter):
title = 'Barcode'
parameter_name = 'barcode'
class ComponentInline(RalphTabularInline):
model = AssetComponent
extra = 1
raw_id_fields = ['component_type']
class ComponentsView(RalphDetailViewAdmin):
icon = 'cog'
name = 'components'
label = 'Components'
url_name = 'asset_components'
inlines = [ComponentInline]
@register(Asset)
class AssetAdmin(
BulkEditChangeListMixin,
TransitionAdminMixin,
AttachmentsMixin,
CustomFieldValueAdminMixin,
RalphAdmin
):
resource_class = AssetResource
_export_queryset_manager = 'objects_with_related'
list_display = ['hostname', 'barcode', 'model', 'status', 'location']
list_filter = [BarcodeFilter, 'status', 'model__category']
search_fields = ['hostname', 'barcode', 'sn']
raw_id_fields = ['model', 'location', 'owner']
bulk_edit_list = ['status', 'location', 'remarks']
bulk_edit_no_fillable = ['barcode', 'sn']
change_views = [ComponentsView]
fieldsets = (
('Basic Info', {
'fields': ('hostname', 'barcode', 'sn', 'model')
}),
('Location', {
'fields': ('location', 'rack', 'position')
}),
('Additional', {
'fields': ('remarks', 'tags'),
'classes': ('collapse',)
}),
)