from django.contrib import admin from .models import * from unfold.admin import ModelAdmin, TabularInline, StackedInline from import_export.admin import ImportExportModelAdmin from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget from django.contrib.postgres.fields import ArrayField from unfold.widgets import ( UnfoldAdminColorInputWidget, ) from unfold.decorators import action, display @admin.register(ProductVariant) class ProductVariantAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm autocomplete_fields = ['product_attributes', 'images', 'in_pack_items'] warn_unsaved_form = True @admin.register(ProductDetailCategory) class ProductDetailCategoryAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm search_fields = ['title'] compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } @admin.register(InPackItems) class InPackItemsAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm search_fields = ['item_title'] compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } @admin.register(AttributeType) class AttributeTypeAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm search_fields = ['name'] compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } @admin.register(AttributeValue) class AttributeValueAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm search_fields = ['value', 'attribute_type__name'] compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } # def get_form(self, request, obj=None, change=False, **kwargs): # form = super().get_form(request, obj, change, **kwargs) # form.base_fields["color"].widget = UnfoldAdminColorInputWidget() # return form @admin.register(ProductImageModel) class ProductImagesAdmin(ModelAdmin): import_form_class = ImportForm export_form_class = ExportForm search_fields = ['name'] compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } class ProductVariantInLine(StackedInline): model = ProductVariant extra = 0 show_change_link = True tab = True min_num = 1 autocomplete_fields = ['product_attributes', 'in_pack_items', 'images'] # search_fields = [''] def formfield_for_dbfield(self, db_field, request, **kwargs): if db_field.name == 'color': kwargs['widget'] = UnfoldAdminColorInputWidget() return super().formfield_for_dbfield(db_field, request, **kwargs) @admin.register(DetailModel) class DetailModelAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm search_fields = ['title'] compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } class DetailModelInLine(TabularInline): model = ProductDetailModel extra = 0 fields = ['detail', 'detail_category'] show_change_link = True autocomplete_fields = ['detail', 'detail_category'] @admin.register(ProductModel) class ProductModelAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm inlines = [ProductVariantInLine, DetailModelInLine] readonly_fields = ('slug', ) search_fields = ['name', 'description', ] list_filter = ['show', 'category'] autocomplete_fields = ['related_products', ] # compressed_fields = True warn_unsaved_form = True list_display = ['display_image', 'display_price', 'view', 'show', 'rating', 'category', ] fieldsets = ( ('فیلد های اصلی', {'fields': ('name', 'description', 'category', 'related_products', 'show',), "classes": ["tab"],}), ('فیلد های سيو', {'fields': ('meta_description', 'meta_keywords', 'meta_rating', 'slug'), "classes": ["tab"],}), ('فیلد های مربوط به کاربر', {'fields': ('rating', 'view',), "classes": ["tab"],}), # ('فیلد های ایتم های پک', {'fields': ('in_pack_items', ), "classes": ["tab"],}) ) formfield_overrides = { models.TextField: { "widget": WysiwygWidget, }, ArrayField: { "widget": ArrayWidget, } } def display_price(self, obj): if obj.variants.all().first(): return obj.variants.all().first().get_toman_price() display_price.short_description = 'قیمت تومانی' @display(description='محصول', header=True) def display_image(self, instance): if instance and instance.variants.first() and instance.variants.first().images.first(): image = instance.variants.first().images.first().image.url if instance.variants.first().images.first().image else None else: image = None return [ instance.name, None, None, { "path": image, "height": 30, "width": 30, "borderless": True, # "squared": True, }, ] # @display( # description=("نمایش در صفحه ی اصلی"), # label={ # True: "danger", # False: "success", # }, # ) # def display_show(self, instance): # return instance.show @admin.register(MainCategoryModel) class MainCategoryModelAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm list_display = ['name', ] readonly_fields = ('slug', ) search_fields = ['name', 'slug'] compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } @admin.register(SubCategoryModel) class SubCategoryModelAdmin(ModelAdmin, ImportExportModelAdmin): list_display = ['name', 'parent', 'show'] search_fields = ['name', 'slug'] list_filter = ['parent', 'show', ] import_form_class = ImportForm export_form_class = ExportForm readonly_fields = ('slug', ) compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } @admin.register(CommentModel) class CommentAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm list_display = ['user', 'product', 'display_content','review_status'] search_fields = ['content',] list_filter = ['review_status',] compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } radio_fields = {'review_status': admin.VERTICAL} def display_content(self, obj): return obj.content[0:35] + '...' display_content.short_description = 'محتوای کامنت' @admin.register(DollorModel) class DollorAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm exclude = ('unique_filed', ) compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } readonly_fields = ('price',)