66from django .contrib .auth import get_user_model
77from django .db import models
88from django .db .models .functions import Now
9+ from django .utils import timezone
910
1011if typing .TYPE_CHECKING :
1112 from user .models import UserExt # noqa: F401
1213
1314User = get_user_model ()
1415
16+ AUDIT_CHOICE_META_SCHEMA : dict [str , dict [str , str ]] = {
17+ "created_by" : {"label" : "생성자" , "type" : "string" , "filter" : "select" },
18+ "updated_by" : {"label" : "수정자" , "type" : "string" , "filter" : "select" },
19+ "created_at" : {"label" : "생성일시" , "type" : "string" , "filter" : "search" },
20+ "updated_at" : {"label" : "수정일시" , "type" : "string" , "filter" : "search" },
21+ }
22+
1523
1624class BaseAbstractModelQuerySet (models .QuerySet ):
1725 def create (self , ** kwargs : dict ) -> models .Model :
@@ -37,7 +45,9 @@ def select_related_with_user(self, *fields) -> typing.Self:
3745 return self .select_related (* _fields )
3846
3947 def get_choices_queryset (self ) -> typing .Self :
40- fields = self .model .choices_select_related
48+ fields = set (self .model .choices_select_related )
49+ if self .model .choices_meta_schema :
50+ fields |= {"created_by" , "updated_by" } # audit 메타 출력을 위한 join
4151 return self .select_related (* fields ) if fields else self .all ()
4252
4353
@@ -66,6 +76,22 @@ class BaseAbstractModel(models.Model):
6676 class Meta :
6777 abstract = True
6878
79+ def get_choice_meta (self ) -> dict :
80+ if not self .choices_meta_schema :
81+ return {}
82+ return self ._choice_meta_fields () | self .get_audit_choice_meta ()
83+
84+ def _choice_meta_fields (self ) -> dict :
85+ return {}
86+
87+ def get_audit_choice_meta (self ) -> dict :
88+ return {
89+ "created_by" : self .created_by_id and str (self .created_by ),
90+ "updated_by" : self .updated_by_id and str (self .updated_by ),
91+ "created_at" : self .created_at and timezone .localtime (self .created_at ).isoformat (),
92+ "updated_at" : self .updated_at and timezone .localtime (self .updated_at ).isoformat (),
93+ }
94+
6995 def save ( # type: ignore[override]
7096 self ,
7197 * ,
0 commit comments