varient drop down

This commit is contained in:
Parsa Nazer
2026-05-18 12:11:09 +03:30
parent cf30a0f10f
commit b75b0858df
+79 -6
View File
@@ -1,7 +1,9 @@
from django.contrib import admin, messages from django.contrib import admin, messages
from django import forms from django import forms
import logging import logging
from django.contrib.postgres.aggregates import StringAgg
from django.db.models import Value
from django.db.models.functions import Coalesce
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# from product.tasks import update_prices # from product.tasks import update_prices
from .models import * from .models import *
@@ -346,13 +348,66 @@ class ProductVariantAdmin(ProductVariantAdminPermission, ModelAdmin, ImportExpor
cache.delete(HOME_CACHE_KEY) cache.delete(HOME_CACHE_KEY)
from unfold.sections import TableSection
class VariantsTableSection(TableSection):
verbose_name = 'تنوع های محصولی'
related_name = "variants"
height = 380
fields = [
'get_name',
"price",
'in_stock',
'sell',
]
# @display(description='برگذار شده', label=True)
# def get_done(self, obj):
# from django.utils import timezone
# now = timezone.localtime()
# today = now.date()
# time = now.time()
# return obj.date > today or (obj.date == today and obj.time > time)
@display(description='نام تنوع')
def get_name(self, obj):
attrs = getattr(obj, "attrs", "")
return f"{obj.product.name} - {attrs}"
def get_queryset(self, request):
qs = super().get_queryset(request)
qs = qs.select_related("product").annotate(
attrs=Coalesce(
StringAgg("product_attributes__value", delimiter=", "),
Value("")
)
)
return qs.only(
"id",
"product__name",
"price",
"in_stock",
"sell",
)
@admin.register(ProductModel) @admin.register(ProductModel)
class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdmin): class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdmin):
list_sections = [VariantsTableSection]
import_form_class = ImportForm import_form_class = ImportForm
export_form_class = ExportForm export_form_class = ExportForm
inlines = [ProductVariantInLine] inlines = [ProductVariantInLine]
readonly_fields = ('slug', 'created_at') readonly_fields = ('slug', 'created_at')
search_fields = ['name', 'description', ] search_fields = ['name', 'description', ]
list_per_page = 10
list_filter = [('category', RelatedDropdownFilter), 'show_in_bot', ('category__parent', RelatedDropdownFilter)] list_filter = [('category', RelatedDropdownFilter), 'show_in_bot', ('category__parent', RelatedDropdownFilter)]
list_filter_submit = True list_filter_submit = True
autocomplete_fields = ['related_products', 'shop', 'category'] autocomplete_fields = ['related_products', 'shop', 'category']
@@ -360,7 +415,7 @@ class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdm
warn_unsaved_form = True warn_unsaved_form = True
# list_per_page = 2 # list_per_page = 2
actions_list = ['redirect_to_learn', 'update_products_price'] actions_list = ['redirect_to_learn', 'update_products_price']
list_display = ['display_image', 'shop__shop_name','display_price', 'view', 'rating', 'category', 'created_at' ,'show_in_website', ] list_display = ['display_image', 'shop__shop_name', 'view', 'rating', 'category', 'created_at' ,'show_in_website', ]
fieldsets = ( fieldsets = (
('فیلد های اصلی', {'fields': ('name', 'description', 'category', 'image', 'related_products','show_in_trends', 'show_in_most_viewed', 'show_in_lot_of_discount', 'show_in_top_seller', 'shop', 'show_in_bot', 'bot_banner'), "classes": ["tab"],}), ('فیلد های اصلی', {'fields': ('name', 'description', 'category', 'image', 'related_products','show_in_trends', 'show_in_most_viewed', 'show_in_lot_of_discount', 'show_in_top_seller', 'shop', 'show_in_bot', 'bot_banner'), "classes": ["tab"],}),
('فیلد های سيو', {'fields': ('meta_description', 'meta_keywords', 'meta_rating', 'slug'), "classes": ["tab"],}), ('فیلد های سيو', {'fields': ('meta_description', 'meta_keywords', 'meta_rating', 'slug'), "classes": ["tab"],}),
@@ -388,10 +443,28 @@ class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdm
super().save_model(request, obj, form, change) super().save_model(request, obj, form, change)
cache.delete(HOME_CACHE_KEY) cache.delete(HOME_CACHE_KEY)
def display_price(self, obj): def get_queryset(self, request):
if obj.variants.all().first(): qs = super().get_queryset(request)
return obj.variants.all().first().price
display_price.short_description = 'قیمت تومانی' qs = qs.select_related(
"shop",
"category",
"category__parent",
).only(
"id",
"name",
"description",
"image",
"view",
"rating",
"created_at",
"show_in_bot",
"category",
"shop",
)
return qs
def show_in_website(self, obj): def show_in_website(self, obj):
url = f"https://heymlz.com/product/{obj.slug}" url = f"https://heymlz.com/product/{obj.slug}"