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 import forms
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__)
# from product.tasks import update_prices
from .models import *
@@ -346,13 +348,66 @@ class ProductVariantAdmin(ProductVariantAdminPermission, ModelAdmin, ImportExpor
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)
class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdmin):
list_sections = [VariantsTableSection]
import_form_class = ImportForm
export_form_class = ExportForm
inlines = [ProductVariantInLine]
readonly_fields = ('slug', 'created_at')
search_fields = ['name', 'description', ]
list_per_page = 10
list_filter = [('category', RelatedDropdownFilter), 'show_in_bot', ('category__parent', RelatedDropdownFilter)]
list_filter_submit = True
autocomplete_fields = ['related_products', 'shop', 'category']
@@ -360,7 +415,7 @@ class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdm
warn_unsaved_form = True
# list_per_page = 2
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 = (
('فیلد های اصلی', {'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"],}),
@@ -388,10 +443,28 @@ class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdm
super().save_model(request, obj, form, change)
cache.delete(HOME_CACHE_KEY)
def display_price(self, obj):
if obj.variants.all().first():
return obj.variants.all().first().price
display_price.short_description = 'قیمت تومانی'
def get_queryset(self, request):
qs = super().get_queryset(request)
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):
url = f"https://heymlz.com/product/{obj.slug}"