임의의 제품의 가격 변동을 추적하는 테이블을 어드민에 배치해야 했다.
어드민에서는 해당 제품의 가격을 변경한다.
ex) 4500000 --> 4250000
변경 사항을 저장
하면,
자동으로 price_history테이블에도 가격, 할인율, 할인금액, 수수료, 수익금 등의 정보가 생성되게 했다.
특히,
어드민에서 해당 정보를 볼 수 있게 배치하는 코드는 아래와 같다.
class InlinePriceHistory(admin.TabularInline):
def display_time(self, obj):
created_at = obj.created_at
created_at = timezone.localtime(created_at)
created_at = created_at.strftime(
'%Y년 %m월 %d일 %p %I시 %M분'
)
return created_at
display_time.short_description = "할인 적용 시점"
model = PriceHistory
max_num = 2
readonly_fields = (
"price",
"discounted_percentage",
"discounted_amount",
"commission",
"profits",
"display_time",
)
class ProductAdmin(ExportMixin, admin.ModelAdmin):
"""Admin for Product"""
inlines = [
--중략--
InlinePriceHistory,
--중략--
]
기능 구현을 위한 코드 작성보다
admin 페이지 코드를 작성할 때가 좀 더 객관적이게 되는 것 같다.
마치 전지적 작가시점이랄까......
"해당 테이블 명을 OO으로 바꾸면, 운영팀에서 내 의도를 바로 이해하겠지?"
"가격 변동표를 어드민 페이지 중 어디에 배치시켜야 자연스럽게 보일까?"
"운영팀에서 과연 이 테이블의 이 필드값을 필요로 할까?"