varient drop down
This commit is contained in:
@@ -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}"
|
||||||
|
|||||||
Reference in New Issue
Block a user