verbose_name = _('product') verbose_name_plural = _('products') name = models.CharField(_('name'), blank=False, max_length=200) slug = models.SlugField(_('slug'), blank=False, unique=True) price = models.PositiveIntegerField(_('price'), blank=False) def __unicode__(self): return self.name @models.permalink def get_absolute_url(self): categories = get_categories() try: category = filter(lambda x: x.pk == self.category_id, categories)[0] category_path = category.get_path() except IndexError: category_path = "-" return ('plugshop-product', None, { 'category_path': category_path, 'slug': self.slug, }) if is_default_model('PRODUCT'): class Product(ProductAbstract): class Meta: app_label = 'plugshop' verbose_name = _('product') verbose_name_plural = _('products')
parent = TreeForeignKey('self', null=True, blank=True, verbose_name=_(u'parent node')) name = models.CharField(_(u'name'), blank=False, max_length=80) slug = models.SlugField(_(u'slug'), blank=False, unique=True) def __unicode__(self): return self.name def get_ancestor_list(self): categories = get_categories() return [n for n in categories if n.lft <= self.lft and n.rght >= self.rght and n.tree_id == self.tree_id] def get_path(self): ancestors = self.get_ancestor_list() return "/".join([a.slug for a in ancestors]) @models.permalink def get_absolute_url(self): return ('plugshop-category', None, {'category_path': self.get_path()}) if is_default_model('CATEGORY'): class Category(CategoryAbstract): class Meta: verbose_name = _(u'category') verbose_name_plural = _(u'categories') app_label = 'plugshop'
default=settings.STATUS_CHOICES_START) created_at = models.DateTimeField(_('creation date'), blank=False, default=datetime.datetime.now, editable=False) updated_at = models.DateTimeField(_('updated at'), blank=True, null=True, editable=False) delivered_at = models.DateTimeField(_('delivery date'), blank=True, null=True, editable=False) def price_total(self): items = load_class(settings.ORDER_PRODUCTS_MODEL).objects.filter( order=self) return sum(item.quantity * item.product.price for item in items) price_total.short_description = _('Total price') def __unicode__(self): return str(self.pk) @models.permalink def get_absolute_url(self): return ('plugshop-order', None, {'number': self.number}) if is_default_model('ORDER'): class Order(OrderAbstract): class Meta: ordering = ['-created_at'] verbose_name = _('order') verbose_name_plural = _('orders') app_label = 'plugshop'
from django.db import models from django.utils.translation import ugettext as _ from plugshop.utils import is_default_model class OrderProductsAbstract(models.Model): class Meta: abstract = True verbose_name = _('order product') verbose_name_plural = _('order product') quantity = models.PositiveIntegerField(_('quantity'), blank=False, null=False, default=1) def price(self): return self.product.price * self.quantity price.short_description = _('Total price') if is_default_model('ORDER_PRODUCTS'): class OrderProducts(OrderProductsAbstract): class Meta: app_label = 'plugshop' verbose_name = _('order product') verbose_name_plural = _('order product')
search_fields = ("name",) prepopulated_fields = {"slug": ("name",)} list_display = ( "name", "slug", "price", #'category', ) list_filter = ("category",) def changelist_view(self, request, extra_context=None): context = {} return super(BaseProductAdmin, self).changelist_view(request, extra_context=context) if is_default_model("PRODUCT"): admin.site.register(load_class(settings.PRODUCT_MODEL), BaseProductAdmin) class BaseCategoryAdmin(MPTTModelAdmin): change_list_template = "admin/category/change_list.html" mptt_level_indent = 20 prepopulated_fields = {"slug": ("name",)} list_display = ("name", "get_products", "slug") def get_products(self, instance): return "<br/>".join(p.name for p in instance.products.all()) get_products.allow_tags = True get_products.short_description = _("products")
list_display = ( 'name', 'slug', 'price', #'category', ) list_filter = ( 'category', ) def changelist_view(self, request, extra_context=None): ctx = {} return super(BaseProductAdmin, self).changelist_view(request, extra_context=ctx) if is_default_model('PRODUCT'): admin.site.register(get_model(settings.PRODUCT_MODEL), BaseProductAdmin) class BaseCategoryAdmin(MPTTModelAdmin): change_list_template = 'admin/category/change_list.html' mptt_level_indent = 20 prepopulated_fields = { 'slug': ('name', ) } list_display = ( 'name', 'get_products', 'slug', )