remove some ugly stuff from models

remotes/origin/ESHOP_refactor_products_app
FUNNYDMAN 7 years ago
parent 06d39b615b
commit a0b1a36fc1
  1. 2
      eshop_project/settings/base.py
  2. 6
      products/context_processors.py
  3. 54
      products/models.py
  4. 62
      products/utils.py
  5. 5
      products/views.py

@ -111,7 +111,7 @@ TEMPLATES = [
'core.context_processors.breadcrumbs', 'core.context_processors.breadcrumbs',
'contact_us.context_processors.contact_us_form', 'contact_us.context_processors.contact_us_form',
'products.context_processors.product_search_form', 'products.context_processors.product_search_form',
'products.context_processors.product_fitler_formset', 'products.context_processors.product_filter_formset',
'products.context_processors.product_categories', 'products.context_processors.product_categories',
'products.context_processors.product_manufacture_list', 'products.context_processors.product_manufacture_list',
'cart.context_processors.cart_basket', 'cart.context_processors.cart_basket',

@ -9,7 +9,7 @@ from products.models import ProductCategory, Manufacturer, Product
def product_search_form(request): def product_search_form(request):
# @TODO: APPLY SEARCH IN THE CONTEXT OF SET OF FILTERS # @TODO: APPLY SEARCH IN THE CONTEXT OF SET OF FILTERS
if not "products" in request.resolver_match.view_name: if "products" not in request.resolver_match.view_name:
product_form_action = {'viewname': 'products:product_list', 'kwargs': {}} product_form_action = {'viewname': 'products:product_list', 'kwargs': {}}
else: else:
product_form_action = {'viewname': request.resolver_match.view_name, 'kwargs': request.resolver_match.kwargs} product_form_action = {'viewname': request.resolver_match.view_name, 'kwargs': request.resolver_match.kwargs}
@ -34,8 +34,8 @@ def product_search_form(request):
} }
def product_fitler_formset(request): def product_filter_formset(request):
if not "products" in request.resolver_match.view_name: if "products" not in request.resolver_match.view_name:
product_form_action = {'viewname': 'products:product_list', 'kwarg': {}} product_form_action = {'viewname': 'products:product_list', 'kwarg': {}}
else: else:
product_form_action = {'viewname': request.resolver_match.view_name, 'kwargs': request.resolver_match.kwargs} product_form_action = {'viewname': request.resolver_match.view_name, 'kwargs': request.resolver_match.kwargs}

@ -6,7 +6,6 @@ from mptt.models import TreeForeignKey
from core.models import AbstractStatusModel, AbstractDateTimeModel, AbstractStatusMPTTModel from core.models import AbstractStatusModel, AbstractDateTimeModel, AbstractStatusMPTTModel
# ---------------------------------- COMMON PRODUCT STATUS ---------------------------------------#
STATUS_INACTIVE = 0 STATUS_INACTIVE = 0
STATUS_ACTIVE = 25 STATUS_ACTIVE = 25
STATUS_DELETED = 50 STATUS_DELETED = 50
@ -20,55 +19,6 @@ STATUS_CHOICES = (
) )
# --------------------------------- PRODUCT ATTRIBUTE STATTUS------------------------------------#
# PRODUCT_ATTRIBUTE_TYPE_NONE = 0
# PRODUCT_ATTRIBUTE_TYPE_RANGE = 25
# PRODUCT_ATTRIBUTE_TYPE_SELECT = 50
# PRODUCT_ATTRIBUTE_TYPE_CHECKBOX = 75
# PRODUCT_ATTRIBUTE_TYPE_INPUT = 100
#
# PRODUCT_ATTRIBUTE_TYPE_CHOICES = (
# (PRODUCT_ATTRIBUTE_TYPE_NONE, _('отсуствует')),
# (PRODUCT_ATTRIBUTE_TYPE_RANGE, _('диапазон')),
# (PRODUCT_ATTRIBUTE_TYPE_SELECT, _('выбор из списка')),
# (PRODUCT_ATTRIBUTE_TYPE_CHECKBOX, _('мн. выбор из списка')),
# (PRODUCT_ATTRIBUTE_TYPE_INPUT, _('значение'),
# )
# )
# PRODUCT_ATTRIBUTE_TYPE_DEFAULT = PRODUCT_ATTRIBUTE_TYPE_NONE
# class ProductAttributeManager(ActiveOnlyManager):
# def get_range_type_attributes(self, product=None):
# pass
#
# def get_select_type_attributes(self, product=None):
# pass
#
# def get_all_type_attributes(self):
# pass
# # @TODO: tranlsate into english and use traslation
# class ProductAttribute(AbstractStatusModel):
# name = models.CharField(_('название'), max_length=64)
# slug = AutoSlugField(populate_from='name', verbose_name=_('код'), help_text="поисковый код аттрибута,по котором возможен поиск")
# type = models.SmallIntegerField(_('тип'), choices=PRODUCT_ATTRIBUTE_TYPE_CHOICES,
# default=PRODUCT_ATTRIBUTE_TYPE_DEFAULT)
# status = models.SmallIntegerField(_('статус'), default=STATUS_DEFAULT, choices=STATUS_CHOICES)
# main_attribute = models.BooleanField(_('основной атрибут'), default=False, help_text=_('будет отображен рядом с товаром при отображении в списке'))
#
# objects = ProductAttributeManager()
#
# def __str__(self):
# return self.name
#
# class Meta:
# ordering = ('slug',)
# verbose_name = _('Аттрибут продукта')
# verbose_name_plural = _('Аттрибуты продукта')
class Manufacturer(AbstractStatusModel): class Manufacturer(AbstractStatusModel):
name = models.CharField(_('название'), max_length=256, blank=False, null=False) name = models.CharField(_('название'), max_length=256, blank=False, null=False)
slug = AutoSlugField(verbose_name=_('код'), unique=True, populate_from='name') slug = AutoSlugField(verbose_name=_('код'), unique=True, populate_from='name')
@ -83,7 +33,6 @@ class Manufacturer(AbstractStatusModel):
verbose_name_plural = _('Производители') verbose_name_plural = _('Производители')
# @TODO: tranlsate into english and use traslation
class ProductCategory(AbstractStatusMPTTModel): class ProductCategory(AbstractStatusMPTTModel):
def get_file_path(self, filename): def get_file_path(self, filename):
return "products/{category}/{filename}".format(**{ return "products/{category}/{filename}".format(**{
@ -119,7 +68,6 @@ class ProductCategory(AbstractStatusMPTTModel):
verbose_name_plural = _("Категории") verbose_name_plural = _("Категории")
# @TODO: translate into english and use translation
class Product(AbstractStatusMPTTModel): class Product(AbstractStatusMPTTModel):
name = models.CharField(_('имя'), max_length=64, db_index=True) name = models.CharField(_('имя'), max_length=64, db_index=True)
slug = AutoSlugField(_('slug'), populate_from='name', db_index=True) slug = AutoSlugField(_('slug'), populate_from='name', db_index=True)
@ -164,8 +112,6 @@ class ProductRate(AbstractDateTimeModel):
verbose_name_plural = _('Рейтинг продукта') verbose_name_plural = _('Рейтинг продукта')
# ----------------- PRODUCT IMAGE STATUS LIST ------------------
class ProductImageManager(models.Manager): class ProductImageManager(models.Manager):
def get_default_image(self): def get_default_image(self):
return self.get_queryset().filter(product=self.instance, is_default=True).first() return self.get_queryset().filter(product=self.instance, is_default=True).first()

@ -1,62 +0,0 @@
from django.utils.html_parser import HTMLParser
from .models import Product
# @TODO: MAKE DESCTIPTION PREVIEW
class ProductDesctipionHtmlParser(HTMLParser):
def __init__(self, convert_charrefs=False, **kwargs):
super().__init__(convert_charrefs, **kwargs)
def error(self, message):
pass
def handle_startendtag(self, tag, attrs):
super().handle_startendtag(tag, attrs)
def handle_data(self, data):
super().handle_data(data)
def handle_endtag(self, tag):
super().handle_endtag(tag)
# @TODO: NOT USED. FIGURE OUT THE PUPRPOSE OF THIS CODE
def get_variant_picker_data(product):
variants = product.variants.all()
variant_attributes = product.attributes.all()
data = {'variants': [], 'variantAttributes': [], 'discount_policy': product.discount_policy}
for attribute in sorted(variant_attributes, key=lambda x: x.main_attribute, reverse=True):
data['variantAttributes'].append({
'name': attribute.name,
'public_name': attribute.name.split('_')[1],
'slug': attribute.slug,
'values': [{'name': value.name, 'slug': value.slug} for value in attribute.values.all()]
})
for variant in variants:
price = variant.price
variant_data = {
'id': variant.id,
'slug': variant.slug,
'name': variant.name,
'price': int(price),
'attributes': variant.attributes,
}
data['variants'].append(variant_data)
return data
def expand_categories(categories):
products = None
for e in categories:
if e.name.startswith('None'):
products = Product.objects.filter(category=e)
return [x for x in categories if not x.name.startswith('None')], products

@ -23,9 +23,6 @@ class ProductDetailView(DetailView):
self.kwargs[self.slug_url_kwarg] = slug_url_kwarg_val self.kwargs[self.slug_url_kwarg] = slug_url_kwarg_val
return super().dispatch(request, *args, **kwargs) return super().dispatch(request, *args, **kwargs)
def get_slug_field(self):
return 'slug'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['title'] = self.object.name context['title'] = self.object.name
@ -76,7 +73,7 @@ class ProductListView(ListView):
return {product.id: CartAddInlineForm(initial={'offer': product.id, 'amount': 1}) for product in products} return {product.id: CartAddInlineForm(initial={'offer': product.id, 'amount': 1}) for product in products}
def get_product_sorting_form(self): def get_product_sorting_form(self):
if not "products" in self.request.resolver_match.view_name: if "products" not in self.request.resolver_match.view_name:
product_form_action = {'viewname': 'products:product_list', 'kwarg': {}} product_form_action = {'viewname': 'products:product_list', 'kwarg': {}}
else: else:
product_form_action = {'viewname': self.request.resolver_match.view_name, product_form_action = {'viewname': self.request.resolver_match.view_name,

Loading…
Cancel
Save