131 lines
4.7 KiB
Python
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")
|