From ef1191fa9499ea873230e779ffda706fb33bc475 Mon Sep 17 00:00:00 2001 From: f2koi Date: Sun, 3 Mar 2024 23:51:39 +0900 Subject: [PATCH 1/2] feature: Show shop item purchase time in admin panel --- src/shop/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shop/admin.py b/src/shop/admin.py index c603f86..600147d 100644 --- a/src/shop/admin.py +++ b/src/shop/admin.py @@ -17,5 +17,5 @@ class ShopAdmin(admin.ModelAdmin): @admin.register(ShopPurchaseLog) class ShopPurchaseLogAdmin(admin.ModelAdmin): - list_display = ("user", "shop", "item", "succeed", "retrieved") + list_display = ("user", "shop", "item", "succeed", "retrieved", "purchase_time") readonly_fields = ("purchase_time",) From 8670f2ceff27976bc730a51c37884b5ed252c294 Mon Sep 17 00:00:00 2001 From: f2koi Date: Mon, 4 Mar 2024 01:16:21 +0900 Subject: [PATCH 2/2] feature: Filter shop purchase logs by datetime, success, retrieval --- src/shop/admin.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/shop/admin.py b/src/shop/admin.py index 600147d..2cf7d84 100644 --- a/src/shop/admin.py +++ b/src/shop/admin.py @@ -1,8 +1,47 @@ +from datetime import datetime, timedelta + from django.contrib import admin from .models import Shop, ShopItem, ShopPurchaseLog +class FilterShopPurchaseLogByPurchaseTime(admin.SimpleListFilter): + title = "구매 시간" + parameter_name = "purchase_time" + + SINCE_ONE_MONTH_AGO = "1M" + SINCE_THREE_MONTHS_AGO = "3M" + SINCE_SIX_MONTHS_AGO = "6M" + SINCE_ONE_YEAR_AGO = "1Y" + + def lookups(self, request, model_admin): + # (URL parameter, human-readable name) + return ( + (self.SINCE_ONE_MONTH_AGO, "최근 1개월"), + (self.SINCE_THREE_MONTHS_AGO, "최근 3개월"), + (self.SINCE_SIX_MONTHS_AGO, "최근 6개월"), + (self.SINCE_ONE_YEAR_AGO, "최근 1년"), + ) + + def queryset(self, request, queryset): + if self.value() == self.SINCE_ONE_MONTH_AGO: + return queryset.filter( + purchase_time__gte=datetime.now() - timedelta(days=30) + ) + if self.value() == self.SINCE_THREE_MONTHS_AGO: + return queryset.filter( + purchase_time__gte=datetime.now() - timedelta(days=30 * 3) + ) + if self.value() == self.SINCE_SIX_MONTHS_AGO: + return queryset.filter( + purchase_time__gte=datetime.now() - timedelta(days=30 * 6) + ) + if self.value() == self.SINCE_ONE_YEAR_AGO: + return queryset.filter( + purchase_time__gte=datetime.now() - timedelta(days=365) + ) + + @admin.register(ShopItem) class ShopItemAdmin(admin.ModelAdmin): list_display = ("title", "hidden") @@ -19,3 +58,4 @@ class ShopAdmin(admin.ModelAdmin): class ShopPurchaseLogAdmin(admin.ModelAdmin): list_display = ("user", "shop", "item", "succeed", "retrieved", "purchase_time") readonly_fields = ("purchase_time",) + list_filter = ("succeed", "retrieved", FilterShopPurchaseLogByPurchaseTime)