from django.contrib import admin, messages # from product.tasks import update_prices from .models import * from unfold.admin import TabularInline, StackedInline from home.models import LearnVideoModel 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 from utils.admin import ModelAdmin from django.shortcuts import redirect @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, } } class AttributeValueInLine(StackedInline): model = AttributeValue extra = 0 show_change_link = True min_num = 1 # autocomplete_fields = ['product_attributes', 'in_pack_items', 'images'] # search_fields = [''] @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 inlines = [AttributeValueInLine] 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, } } @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 DetailInLine(StackedInline): model = DetailModel extra = 0 show_change_link = True min_num = 1 max_num = 4 @admin.register(ProductDetailModel) class ProductDetailModel1Admin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm search_fields = ['detail_category__title', 'name'] compressed_fields = True warn_unsaved_form = True autocomplete_fields = ['detail_category',] inlines = [DetailInLine] formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } class ProductVariantInLine(StackedInline): model = ProductVariant extra = 0 show_change_link = True tab = True min_num = 1 readonly_fields = ['price'] # inlines = [DetailModelInLine] autocomplete_fields = ['product_attributes', 'in_pack_items', 'images', 'details'] fields = ['images', 'video','input_price', 'min_price', 'currency', 'price', 'discount','in_stock', 'color', 'product_attributes', 'in_pack_items', 'details', 'sell', 'slider_category'] # 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(ProductVariant) class ProductVariantAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm autocomplete_fields = ['product_attributes', 'images', 'in_pack_items', 'details'] warn_unsaved_form = True readonly_fields = ['price', 'created_at'] list_display = ('product', 'created_at') # inlines = [DetailModelInLine] @admin.register(ProductModel) class ProductModelAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm inlines = [ProductVariantInLine] readonly_fields = ('slug', 'created_at') search_fields = ['name', 'description', ] list_filter = ['show', 'category'] autocomplete_fields = ['related_products', ] # compressed_fields = True warn_unsaved_form = True actions_list = ['redirect_to_learn', 'update_products_price'] list_display = ['display_image', 'display_price', 'view', 'show', 'rating', 'category', 'created_at'] 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().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, }, ] @action(description=f"اپدیت قیمت ها") def update_products_price(self, request): # update_prices() messages.success(request, f"قیمت {ProductVariant.objects.all().count()} تنوع محصول اپدیت شد") return redirect("admin:product_productmodel_changelist") # @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'] search_fields = ['name', 'slug'] list_filter = ['parent', ] 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',)