from django.contrib import admin from import_export import resources, fields, widgets from import_export.admin import ImportExportModelAdmin from .models import Product, ProductCategory, ProductImage # # 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): # # def clean(self, value, row=None, *args, **kwargs): # # return self.model.objects.get_or_create(name=value)[0] # class ProductImageInline(admin.TabularInline): model = ProductImage extra = 0 # # # class ProductAttributeInline(admin.TabularInline): # # model = ProductAttribute # # extra = 1 # # 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 OfferInline(admin.TabularInline): # # model = Offer # # extra = 1 # # verbose_name_plural = 'Offers' # # suit_classes = 'suit-tab suit-tab-offers' # @admin.register(ProductCategory) class ProductCategoryAdmin(admin.ModelAdmin): list_display = ('name','slug') search_fields = ('name','slug') # # # class AttributeChoiceValueAdmin(admin.ModelAdmin): # # list_display = [field.name for field in ProductCategory._meta.fields] # # # # class Meta: # # model = AttributeChoiceValue # # # # admin.site.register(AttributeChoiceValue, AttributeChoiceValueAdmin) # # 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() # @admin.register(Product) class ProductAdmin(ImportExportModelAdmin): list_display = ['id', 'name', 'category', 'manufacturer','status'] list_filter = ['status', 'create_at', 'updated_at', 'category'] search_fields = ['name', 'id'] # resource_class = ProductResource # class OfferResource(CustomModelResource): # 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(), # ) # # products = fields.Field(column_name='products', attribute='products', # widget=widgets.ForeignKeyWidget(Product, field='name'), # ) # # is_active = fields.Field(column_name='is_active', attribute='is_active', # default=1, # widget=widgets.BooleanWidget()) # # attributes = fields.Field(column_name='attributes', attribute='attributes', # default={}, # widget=widgets.CharWidget()) # # class Meta: # model = Offer # fields = ('name', 'products', 'price', 'is_active', 'attributes') # export_order = ('name', 'products', 'attributes', 'is_active', 'price') # import_id_fields = ('name',) # class OfferAdmin(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.site.register(ProductImage, ProductImageAdmin) # # admin.site.register(ProductCategory, ProductCategoryAdmin) # # admin.site.register(Product, ProductAdmin) # # admin.site.register(Offer, OfferAdmin)