Init Django-SHOP

This commit is contained in:
2021-02-23 22:57:30 +00:00
parent 8842939839
commit b4a79a6890
109 changed files with 5734 additions and 160 deletions

130
weirdlittleempire/admin.py Normal file
View File

@@ -0,0 +1,130 @@
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")