@@ -33,6 +33,13 @@ def __str__(self) -> str: # pragma: no cover
3333
3434
3535class Category (BaseAbstractModel ):
36+ choices_select_related = ("group" , "event" , "event__organization" )
37+ choices_meta_schema : typing .ClassVar [dict ] = {
38+ "is_ticket" : {"label" : "티켓" , "type" : "boolean" },
39+ "group" : {"label" : "그룹" , "type" : "string" , "filter" : "select" },
40+ "event" : {"label" : "이벤트" , "type" : "string" , "filter" : "select" },
41+ }
42+
3643 group = models .ForeignKey (CategoryGroup , on_delete = models .PROTECT )
3744 name = models .CharField (max_length = 100 )
3845 priority = models .IntegerField (default = 0 )
@@ -49,6 +56,13 @@ class Meta:
4956 def __str__ (self ) -> str : # pragma: no cover
5057 return f"{ self .group .name } > { self .name } "
5158
59+ def get_choice_meta (self ) -> dict :
60+ return {
61+ "group" : self .group .name ,
62+ "is_ticket" : self .is_ticket ,
63+ "event" : str (self .event ) if self .event_id else None ,
64+ }
65+
5266
5367class Tag (BaseAbstractModel ):
5468 name = models .CharField (max_length = 100 )
@@ -119,6 +133,14 @@ class CurrentStatus(models.TextChoices):
119133 OUT_OF_ORDERABLE_PERIOD = "out_of_orderable_period" , "판매 기간 아님"
120134 ACTIVE = "active" , "노출 중"
121135
136+ choices_select_related = ("category" , "category__group" )
137+ choices_meta_schema : typing .ClassVar [dict ] = {
138+ "category" : {"label" : "카테고리" , "type" : "string" , "filter" : "select" },
139+ "price" : {"label" : "가격" , "type" : "number" },
140+ "stock" : {"label" : "재고" , "type" : "number" },
141+ "status" : {"label" : "상태" , "type" : "string" , "filter" : "select" },
142+ }
143+
122144 name = models .TextField ()
123145 description = models .TextField (null = True , blank = True )
124146 image = models .ForeignKey (
@@ -169,6 +191,14 @@ class Meta:
169191 def __str__ (self ) -> str : # pragma: no cover
170192 return f"{ self .category } > { self .name } ({ self .price } 원)"
171193
194+ def get_choice_meta (self ) -> dict :
195+ return {
196+ "category" : str (self .category ),
197+ "price" : self .price ,
198+ "stock" : self .stock ,
199+ "status" : self .current_status .label ,
200+ }
201+
172202 @property
173203 def visible_period (self ) -> TimeSpan :
174204 return TimeSpan (self .visible_starts_at , self .visible_ends_at )
0 commit comments