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