Files
empire/weirdlittleempire/admin.py
2021-02-23 23:00:01 +00:00

131 lines
4.7 KiB
Python

from django.contrib import admin
from django.template.context import Context
from django.template.loader import get_template
from django.utils.translation import ugettext_lazy as _
from filer.models import ThumbnailOption
from cms.admin.placeholderadmin import PlaceholderAdminMixin, FrontendEditableAdminMixin
from shop.admin.defaults import customer
from shop.admin.defaults.order import OrderAdmin
from shop.models.defaults.order import Order
from shop.admin.order import PrintInvoiceAdminMixin
from shop.admin.delivery import DeliveryOrderAdminMixin
from adminsortable2.admin import SortableAdminMixin, PolymorphicSortableAdminMixin
from shop.admin.product import CMSPageAsCategoryMixin, UnitPriceMixin, ProductImageInline, InvalidateProductCacheMixin, SearchProductIndexMixin, CMSPageFilter
from polymorphic.admin import (PolymorphicParentModelAdmin, PolymorphicChildModelAdmin,
PolymorphicChildModelFilter)
from weirdlittleempire.models import Product, Commodity, SmartPhoneVariant, SmartPhoneModel, OperatingSystem
from weirdlittleempire.models import Manufacturer, SmartCard
admin.site.site_header = "Weird Little Empire Administration"
admin.site.unregister(ThumbnailOption)
@admin.register(Order)
class OrderAdmin(PrintInvoiceAdminMixin, DeliveryOrderAdminMixin, OrderAdmin):
pass
admin.site.register(Manufacturer, admin.ModelAdmin)
__all__ = ['customer']
@admin.register(Commodity)
class CommodityAdmin(InvalidateProductCacheMixin, SearchProductIndexMixin, SortableAdminMixin, FrontendEditableAdminMixin,
PlaceholderAdminMixin, CMSPageAsCategoryMixin, PolymorphicChildModelAdmin):
"""
Since our Commodity model inherits from polymorphic Product, we have to redefine its admin class.
"""
base_model = Product
fields = [
('product_name', 'slug'),
('product_code', 'unit_price'),
'quantity',
'active',
'caption',
'manufacturer',
]
filter_horizontal = ['cms_pages']
inlines = [ProductImageInline]
prepopulated_fields = {'slug': ['product_name']}
@admin.register(SmartCard)
class SmartCardAdmin(InvalidateProductCacheMixin, SearchProductIndexMixin, SortableAdminMixin, FrontendEditableAdminMixin,
CMSPageAsCategoryMixin, PlaceholderAdminMixin, PolymorphicChildModelAdmin):
base_model = Product
fieldsets = (
(None, {
'fields': [
('product_name', 'slug'),
('product_code', 'unit_price'),
'quantity',
'active',
'caption',
'description',
],
}),
(_("Properties"), {
'fields': ['manufacturer', 'storage', 'card_type', 'speed'],
}),
)
filter_horizontal = ['cms_pages']
inlines = [ProductImageInline]
prepopulated_fields = {'slug': ['product_name']}
admin.site.register(OperatingSystem, admin.ModelAdmin)
class SmartPhoneInline(admin.TabularInline):
model = SmartPhoneVariant
extra = 0
@admin.register(SmartPhoneModel)
class SmartPhoneAdmin(InvalidateProductCacheMixin, SearchProductIndexMixin, SortableAdminMixin, FrontendEditableAdminMixin,
CMSPageAsCategoryMixin, PlaceholderAdminMixin, PolymorphicChildModelAdmin):
base_model = Product
fieldsets = [
(None, {
'fields': [
('product_name', 'slug'),
'active',
'caption',
'description',
],
}),
(_("Properties"), {
'fields': ['manufacturer', 'battery_type', 'battery_capacity', 'ram_storage',
'wifi_connectivity', 'bluetooth', 'gps', 'operating_system',
('width', 'height', 'weight',), 'screen_size'],
}),
]
filter_horizontal = ['cms_pages']
inlines = [ProductImageInline, SmartPhoneInline]
prepopulated_fields = {'slug': ['product_name']}
def render_text_index(self, instance):
template = get_template(
'search/indexes/weirdlittleempire/commodity_text.txt')
return template.render(Context({'object': instance}))
render_text_index.short_description = _("Text Index")
@admin.register(Product)
class ProductAdmin(PolymorphicSortableAdminMixin, PolymorphicParentModelAdmin):
base_model = Product
child_models = [SmartPhoneModel, SmartCard, Commodity]
list_display = ['product_name', 'get_price', 'product_type', 'active']
list_display_links = ['product_name']
search_fields = ['product_name']
list_filter = [PolymorphicChildModelFilter, CMSPageFilter]
list_per_page = 250
list_max_show_all = 1000
def get_price(self, obj):
return str(obj.get_real_instance().get_price(None))
get_price.short_description = _("Price starting at")