훈훈훈

파이썬(Django) :: Django-mptt 정리 본문

파이썬/Django

파이썬(Django) :: Django-mptt 정리

훈훈훈 2020. 4. 18. 17:26

이번에는 Django-mptt에 대하여 정리해보려고 한다.

 

해당 모듈을 사용하게된 계기는 ERD 설계 시, Categorya 항목들에 대하여 계층형으로 구성하기 위해 사용하게 되었다.

 

카테고리 항목들을 계층형으로 작성하는 이유는 다음과 같다.

 

만약 카테고리가 main, sub 두 가지로 구성이 되어 있다고 가정해보자, 이렇게 구축된 환경에서 category가 1개 2개 3개 늘어날 때마다 

각각 독립적인 관계가 아니기 때문에 구조가 점점 복잡해지게 된다. 

 

하지만 계층형으로 설계시 아래와 같이 만들 수 있으며, 확장에 용이하다.

 

# 카테고리 예시

 

 

# 예제 코드

from mptt.models     import MPTTModel, TreeForeignKey

class Category(MPTTModel):
    name       = models.CharField(max_length=50, unique=True)
    parent     = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class MPTTMeta:
        order_insertion_by = ['name']

    class Meta:
        db_table = 'categories'

 

위 예제는 Template 없이 단순히 REST API를 만들기 위해서 사용한 예시이다.

 

카테고리를 위와 같이 작성하였다면, 이제 Category 테이블 한 곳에서 계층형 구조로 설계할 수 있다.

 

 

** 참고

https://buildmedia.readthedocs.org/media/pdf/mptt/latest/mptt.pdf

Comments