Beispiel #1
0
class BasePageAdmin(AbstractPageSeoAdmin):
    inlines = (PageImageInline, )
    actions = AbstractPageSeoAdmin.actions + ('set_fixtures', 'load_fixtures')

    fieldsets = (
        fields_element(('video', )),  # fields
        AbstractPageSeoAdmin.fieldsets[0],
        AbstractPageSeoAdmin.fieldsets[2],
        AbstractPageSeoAdmin.fieldsets[3],
    )

    def set_fixtures(self,
                     request,
                     queryset,
                     dir_name=APP_NAME,
                     filename='default.json'):
        super(BasePageAdmin, self).set_fixtures(request, queryset, dir_name)

    set_fixtures.short_description = 'Фикстуры: Сохранить текущие'

    def load_fixtures(self,
                      request,
                      queryset,
                      dir_name=APP_NAME,
                      filename='default.json'):
        super(BasePageAdmin, self).load_fixtures(request, queryset, dir_name)

    load_fixtures.short_description = 'Фикстуры: Загрузить последние'
Beispiel #2
0
class BaseTaskAdmin(AbstractMPTTPageSeoAdmin):
    inlines = (TaskImageInline,)

    fieldsets = (
        fields_element(('parent',)),
        AbstractMPTTPageSeoAdmin.fieldsets[0],
        AbstractMPTTPageSeoAdmin.fieldsets[2],
        AbstractMPTTPageSeoAdmin.fieldsets[3],
    )
Beispiel #3
0
class BaseBlogAdmin(AbstractMPTTPageSeoAdmin):
    inlines = (BlogImageInline, )
    actions = AbstractMPTTPageSeoAdmin.actions + ('set_fixtures',
                                                  'load_fixtures')

    fieldsets = (
        fields_element(('parent', )),
        AbstractMPTTPageSeoAdmin.fieldsets[0],
        AbstractMPTTPageSeoAdmin.fieldsets[2],
        AbstractMPTTPageSeoAdmin.fieldsets[3],
    )
Beispiel #4
0
class BasePostAdmin(AbstractPageSeoAdmin):
    inlines = (PostImageInline, )

    raw_id_fields = ('blog', ) + AbstractPageSeoAdmin.raw_id_fields
    readonly_fields = AbstractPageSeoAdmin.readonly_fields + (
        'comment_count', )
    list_filter = ('blog', ) + AbstractPageSeoAdmin.list_filter
    list_display = ('blog', ) + AbstractPageSeoAdmin.list_display
    list_display_links = AbstractPageSeoAdmin.list_display_links

    fieldsets = (
        fields_element(('blog', 'comment_count')),
        AbstractPageSeoAdmin.fieldsets[0],
        AbstractPageSeoAdmin.fieldsets[2],
        AbstractPageSeoAdmin.fieldsets[3],
    )
Beispiel #5
0
class BaseHomeAdmin(AbstractPageSeoAdmin):
    inlines = (HomeImageInline,)
    actions = AbstractPageSeoAdmin.actions + ('set_fixtures', 'load_fixtures')
    raw_id_fields = AbstractPageSeoAdmin.raw_id_fields + ('blog',)
    list_filter = AbstractPageSeoAdmin.list_filter + ('blog',)
    filter_horizontal = ('catalogs',)

    fieldsets = (
        fields_element(('blog', 'catalogs', 'video')),              # fields
        AbstractPageSeoAdmin.fieldsets[0],      # content
        AbstractPageSeoAdmin.fieldsets[2],      # seo
        AbstractPageSeoAdmin.fieldsets[3],      # info + ...inline
    )

    def set_fixtures(self, request, queryset, dir_name=APP_NAME, filename='default.json'):
        super(BaseHomeAdmin, self).set_fixtures(request, queryset, dir_name)
    set_fixtures.short_description = '[не применять] Фикстуры: Сохранить текущие'

    def load_fixtures(self, request, queryset, dir_name=APP_NAME, filename='default.json'):
        super(BaseHomeAdmin, self).load_fixtures(request, queryset, dir_name)
    load_fixtures.short_description = '[не применять] Фикстуры: Загрузить последние'
Beispiel #6
0
class BaseProductAdmin(AbstractPageSeoAdmin, ImportExportModelAdmin):
    inlines = (ProductItemInline, ProductImageInline, ProductParamInline)
    resource_class = ProductResource
    raw_id_fields = AbstractPageSeoAdmin.raw_id_fields
    readonly_fields = AbstractPageSeoAdmin.readonly_fields
    filter_horizontal = ('catalogs', 'recommend_products'
                         ) + AbstractPageSeoAdmin.filter_horizontal
    list_filter = ('catalogs', ) + AbstractPageSeoAdmin.list_filter
    list_display = AbstractPageSeoAdmin.list_display + ('is_bestseller',
                                                        'is_new', 'articul')
    list_display_links = AbstractPageSeoAdmin.list_display_links + (
        'articul', )
    list_editable = AbstractPageSeoAdmin.list_editable + ('is_bestseller',
                                                          'is_new')

    fieldsets = (
        fields_element(('catalogs', 'articul', 'is_bestseller', 'is_new',
                        'recommend_products', 'layout')),
        AbstractPageSeoAdmin.fieldsets[0],
        AbstractPageSeoAdmin.fieldsets[2],
        AbstractPageSeoAdmin.fieldsets[3],
    )

    suit_form_tabs = (
        ('content', 'КОНТЕНТ'),
        ('price', 'ЦЕНЫ/ВАРИАНТЫ ТОВАРА'),
        ('fields', 'ПОЛЯ'),
        ('param', 'ПАРАМЕТРЫ'),
        ('seo', 'СЕО'),
        ('image', 'ФОТО'),
        ('info', 'ИНФО'),
    )

    def get_price(self, obj):
        return obj.get_price()

    get_price.short_description = 'Цена'

    def clone_object(self, request, queryset):
        [self._clone_product(request, obj) for obj in queryset]

    clone_object.short_description = CloneObjectMixin.short_description

    def _clone_product(self, request, obj):
        cache_catalogs = obj.catalogs.all()
        cache_tags = obj.tags.all()
        cache_product_items = obj.get_product_items()
        cache_product_images = obj.get_images()
        cache_product_params = obj.get_product_params()

        clone = obj
        clone.id = None
        clone.is_show = False
        clone.title = self.clone_format(clone.title)
        clone.description = self.clone_format(clone.description)
        clone.articul = self.clone_format(clone.articul)
        clone.slug = self.clone_format(clone.slug)
        clone.seo_title = self.clone_format(clone.seo_title)
        clone.seo_description = self.clone_format(clone.seo_description)
        clone.seo_keywords = self.clone_format(clone.seo_keywords)

        try:
            clone.save()

            [clone.tags.add(t) for t in cache_tags]
            [clone.catalogs.add(c) for c in cache_catalogs]

            for pi in cache_product_items:
                ProductItem(product_id=clone.pk,
                            name=self.clone_format(pi.name),
                            text=pi.text,
                            unit=pi.unit,
                            price=pi.price,
                            price_discount=pi.price_discount,
                            is_main=pi.is_main,
                            default_price=pi.default_price).save()

            for pi in cache_product_images:
                ProductImage(
                    product_id=clone.pk,
                    image=pi.image,
                    image_title=pi.image_title,
                    image_description=pi.image_description,
                    image_is_main=pi.image_is_main,
                ).save()

            for pp in cache_product_params:
                ProductParam(
                    product_id=clone.pk,
                    param=pp.param,
                    str_value=pp.str_value,
                    bool_value=pp.bool_value,
                ).save()

            self.clone_success(request, obj)
        except IntegrityError:
            self.clone_error(request, obj)

        return clone