본문 바로가기
python/Django

Django annotate management

by Redking

Django 프로젝트를 개발하다보면 동일한 annotate를 각기 다른 view에서 호출하는 경우가 생기게 됩니다. 이럴 경우 유지보수가 어려워 지는 이슈가 발생하여 나중에 고생하게 될 수도 있습니다. 그래서 이런 이슈를 방지하고자 annotate를 관리하는 방법 중 하나를 소개하고자 합니다. annotate필드를 model.py의 class내에 class method로 관리하는 방법입니다. 

 

class Sample(models.model):
    first_name = models.CharField('이름', max_length=24)
    last_name = models.CharField('성', max_length=12)
    
    @classmethod
    def get_annotated_field(cls):
    	return {
        	'full_name': Concat(
                'first_name', V(' ('), 'last_name', V(')'),
                output_field=CharField()
            )
        }
        
Sample.objects.create(first_name='first', last_name='last')
sample = Sample.objects.annotate(
	full_name=Sample.get_annotated_fields()['full_name']
).order_by('-id')
sample.first().full_name
# first (last)

'python > Django' 카테고리의 다른 글

Django bulk_create/bulk_update  (0) 2022.11.16
Django sitemap 분할 관리하기  (0) 2022.10.13
Django Database Functions - Text functions  (0) 2022.10.11
Django csv streaminghttpresponse  (0) 2022.08.31
Django Database Functions - Date functions  (0) 2022.06.08

댓글