From 7ad166c52a0e7c6a4e7f0b688146da3d2a1be48a Mon Sep 17 00:00:00 2001 From: Max Yakovenko Date: Mon, 23 Jul 2018 03:15:21 +0300 Subject: [PATCH] restore previous logic in products admin model --- products/admin.py | 243 ++++++++++++++++++++++++---------------------- 1 file changed, 128 insertions(+), 115 deletions(-) diff --git a/products/admin.py b/products/admin.py index 9a3f415..0b065a9 100644 --- a/products/admin.py +++ b/products/admin.py @@ -1,27 +1,30 @@ from django.contrib import admin from import_export import resources, fields, widgets from import_export.admin import ImportExportModelAdmin -from .models import Product, ProductCategory, ProductImage +from .models import Product, ProductCategory, ProductImage, ProductAttribute, ProductAttributeValue, Manufacturer # -# class CustomModelResource(resources.ModelResource): -# def before_import_row(self, row, **kwargs): -# """ -# Override to add additional logic. Does nothing by default. -# """ -# try: -# row['attributes'] = eval(row['attributes']) -# except: -# try: -# row['discount_policy'] = eval(row['discount_policy']) -# except: -# pass -# -# class CustomManyToManyWidget(widgets.ManyToManyWidget): -# def clean(self, value, row=None, *args, **kwargs): -# t1 = super(CustomManyToManyWidget, self).clean(value) -# return self.model.objects.get(name=t1) if t1 else None +class CustomModelResource(resources.ModelResource): + def before_import_row(self, row, **kwargs): + """ + Override to add additional logic. Does nothing by default. + """ + try: + row['attributes'] = eval(row['attributes']) + except: + try: + row['discount_policy'] = eval(row['discount_policy']) + except: + pass + + +class CustomManyToManyWidget(widgets.ManyToManyWidget): + def clean(self, value, row=None, *args, **kwargs): + t1 = super(CustomManyToManyWidget, self).clean(value) + return self.model.objects.get(name=t1) if t1 else None + + # # # # class CustomForeignKeyWidget(widgets.ForeignKeyWidget): @@ -31,6 +34,8 @@ from .models import Product, ProductCategory, ProductImage class ProductImageInline(admin.TabularInline): model = ProductImage extra = 0 + + # # # class ProductAttributeInline(admin.TabularInline): # # model = ProductAttribute @@ -38,12 +43,14 @@ class ProductImageInline(admin.TabularInline): # # verbose_name_plural = 'ProductAttribute' # # suit_classes = 'suit-tab suit-tab-PA' # # -# class AttributeChoiceValueInline(admin.TabularInline): -# model = ProductAttributeChoiceValue -# # prepopulated_fields = {'slug': ('name',)} -# extra = 1 -# verbose_name_plural = 'AttributeChoiceValue' -# suit_classes = 'suit-tab suit-tab-ACV' +class AttributeChoiceValueInline(admin.TabularInline): + model = ProductAttributeValue + # prepopulated_fields = {'slug': ('name',)} + extra = 1 + verbose_name_plural = 'AttributeChoiceValue' + suit_classes = 'suit-tab suit-tab-ACV' + + # # # # class OfferInline(admin.TabularInline): # # model = Offer @@ -53,8 +60,9 @@ class ProductImageInline(admin.TabularInline): # @admin.register(ProductCategory) class ProductCategoryAdmin(admin.ModelAdmin): - list_display = ('name','slug') - search_fields = ('name','slug') + list_display = ('name', 'slug') + search_fields = ('name', 'slug') + # # # class AttributeChoiceValueAdmin(admin.ModelAdmin): @@ -64,93 +72,102 @@ class ProductCategoryAdmin(admin.ModelAdmin): # # model = AttributeChoiceValue # # # # admin.site.register(AttributeChoiceValue, AttributeChoiceValueAdmin) + +@admin.register(ProductAttribute) +class ProductAttributeAdmin(admin.ModelAdmin): + list_display = ('slug','name') + search_fields = ('slug','name') + inlines = [AttributeChoiceValueInline] + # prepopulated_fields = {'slug': ('name',)} + + suit_form_tabs = (('general', 'General'), + ('ACV', 'AttributeValues'),) + + class Meta: + model = ProductAttribute + + +@admin.register(Manufacturer) +class ManufacturerAdmin(admin.ModelAdmin): + list_display = ('slug', 'name') + search_fields = ('slug', 'name'), + + class Meta: + model = Manufacturer # -# class ProductAttributeAdmin(admin.ModelAdmin): -# list_display = [field.name for field in ProductAttribute._meta.fields] -# inlines = [AttributeChoiceValueInline] -# # prepopulated_fields = {'slug': ('name',)} -# -# suit_form_tabs = (('general', 'General'), -# ('ACV', 'AttributeValues'),) -# -# class Meta: -# model = ProductAttribute -# -# admin.site.register(ProductAttribute, ProductAttributeAdmin) -# -# @admin.register(Manufacturer) -# class ProducerAdmin(admin.ModelAdmin): -# list_display = [field.name for field in Manufacturer._meta.fields] -# -# -# class ProductResource(CustomModelResource): -# # id = fields.Field(default=generate_Jid(prefix='J'), -# # readonly=True, -# # widget=widgets.CharWidget(), -# # ) -# -# name = fields.Field(column_name='name', attribute='name', -# default=None, -# widget=widgets.CharWidget(), -# ) -# # price = fields.Field(column_name='price', attribute='price', -# # default=0, -# # widget=widgets.DecimalWidget(), -# # ) -# description = fields.Field(column_name='description', attribute='description', -# default=None, -# widget=widgets.CharWidget(), -# ) -# -# # producer = fields.Field(column_name='producer', attribute='producer', -# # default=None, -# # widget=widgets.CharWidget(), -# # ) -# -# category = fields.Field(column_name='category', attribute='category', -# default=None, -# widget=widgets.ForeignKeyWidget(ProductCategory, field='name'), -# ) -# producer = fields.Field(column_name='producer', attribute='producer', -# default=None, -# widget=widgets.ForeignKeyWidget(Manufacturer, field='name'), -# ) -# attributes = fields.Field(column_name='attributes', attribute='attributes', -# default=None, -# widget=CustomManyToManyWidget(ProductAttribute, field="name"), -# ) -# is_active = fields.Field(column_name='is_active', attribute='is_active', -# default=1, -# widget=widgets.BooleanWidget()) -# -# discount_policy = fields.Field(column_name='discount_policy', attribute='discount_policy', -# default={}, -# widget=widgets.CharWidget()) -# -# # delete = fields.Field(column_name='delete', attribute='delete', -# # default=0, -# # widget=widgets.BooleanWidget()) -# -# # def for_delete(self, row, instance): -# # return self.fields['delete'].clean(row) -# -# class Meta: -# model = Product -# fields = ('id', 'name', 'description', 'producer', 'category', 'is_active', 'attributes', 'discount_policy') -# export_order = ('id', 'name', 'producer', 'is_active', 'category', 'attributes', 'description', 'discount_policy') -# # import_id_fields = ('name',) # -# def dehydrate_str_choices(self, obj): -# if obj.id: -# return obj.str_choices() +class ProductResource(CustomModelResource): + # id = fields.Field(default=generate_Jid(prefix='J'), + # readonly=True, + # widget=widgets.CharWidget(), + # ) + + name = fields.Field(column_name='name', attribute='name', + default=None, + widget=widgets.CharWidget(), + ) + # price = fields.Field(column_name='price', attribute='price', + # default=0, + # widget=widgets.DecimalWidget(), + # ) + description = fields.Field(column_name='description', attribute='description', + default=None, + widget=widgets.CharWidget(), + ) + + # producer = fields.Field(column_name='producer', attribute='producer', + # default=None, + # widget=widgets.CharWidget(), + # ) + + category = fields.Field(column_name='category', attribute='category', + default=None, + widget=widgets.ForeignKeyWidget(ProductCategory, field='name'), + ) + producer = fields.Field(column_name='producer', attribute='producer', + default=None, + widget=widgets.ForeignKeyWidget(Manufacturer, field='name'), + ) + attributes = fields.Field(column_name='attributes', attribute='attributes', + default=None, + widget=CustomManyToManyWidget(ProductAttribute, field="name"), + ) + is_active = fields.Field(column_name='is_active', attribute='is_active', + default=1, + widget=widgets.BooleanWidget()) + + discount_policy = fields.Field(column_name='discount_policy', attribute='discount_policy', + default={}, + widget=widgets.CharWidget()) + + # delete = fields.Field(column_name='delete', attribute='delete', + # default=0, + # widget=widgets.BooleanWidget()) + + # def for_delete(self, row, instance): + # return self.fields['delete'].clean(row) + + class Meta: + model = Product + fields = ('id', 'name', 'description', 'producer', 'category', 'is_active', 'attributes', 'discount_policy') + export_order = ( + 'id', 'name', 'producer', 'is_active', 'category', 'attributes', 'description', 'discount_policy') + # import_id_fields = ('name',) + + def dehydrate_str_choices(self, obj): + if obj.id: + return obj.str_choices() + + # @admin.register(Product) class ProductAdmin(ImportExportModelAdmin): - list_display = ['id', 'name', 'category', 'manufacturer','status'] + list_display = ['id', 'name', 'category', 'manufacturer', 'status'] list_filter = ['status', 'create_at', 'updated_at', 'category'] search_fields = ['name', 'id'] - # resource_class = ProductResource + resource_class = ProductResource + # class OfferResource(CustomModelResource): # name = fields.Field(column_name='name', attribute='name', @@ -185,14 +202,10 @@ class ProductAdmin(ImportExportModelAdmin): # list_display = ['id', 'name', 'products', 'price', 'is_active', 'attributes'] # resource_class = OfferResource -# @admin.register(ProductImage) -# class ProductImageAdmin(admin.ModelAdmin): -# list_display = [field.name for field in ProductImage._meta.fields] -# -# class Meta: -# model = ProductImage +@admin.register(ProductImage) +class ProductImageAdmin(admin.ModelAdmin): + list_display = [field.name for field in ProductImage._meta.fields] + + class Meta: + model = ProductImage -# # admin.site.register(ProductImage, ProductImageAdmin) -# # admin.site.register(ProductCategory, ProductCategoryAdmin) -# # admin.site.register(Product, ProductAdmin) -# # admin.site.register(Offer, OfferAdmin)