django-mptt, tree 구조를 쉽게(?) 구현하기.
1. 설치
pip install django-mptt
2. 설정하기(project/settings.py)
프로젝트의 settings.py에 아래 내용 추가
INSTALLED_APPS = [ #3'rd party APP 'mptt', #django-mptt, 이부분을 추가해야 한다. # below is django default apps... 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
들여쓰기를 조정하고 싶은경우 아래 부분도 추가해줌(settings.py 맨 마지막에)
MPTT_ADMIN_LEVEL_INDENT = 5
3. 모델을 만든다.(app/models.py)
from mptt.models import MPTTModel, TreeForeignKey class Category(MPTTModel): name = models.CharField(max_length=64, unique=True) parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True, on_delete=models.CASCADE) slug = models.SlugField() class MPTTMeta: order_insertion_by = ['name'] class Meta: unique_together = (('parent', 'slug', )) verbose_name_plural = 'categories' def get_slug_list(self): try: ancestors = self.get_ancestors(include_self=True) except: ancestors = list() else: ancestors = [i.slug for i in ancestors] slugs = list() for i in range(len(ancestors)): slugs.append('/'.join(ancestors[:i+1])) return slugs def __str__(self): return self.name
4. 이제, 해당 데이타 모델에 적용하기위해, app/admin.py 에 아래 내용을 추가한다.
from django.contrib import admin # Register your models here. from .models import Category from mptt.admin import DraggableMPTTAdmin # 관리자페이지에서 카테고리를 트리형식으로 admin.site.register(Category, DraggableMPTTAdmin)
이제, admin 페이지에서 tree 구조의 category를 볼 수 있다.
사용자에게 보여주는 view는 별도로 구현해야한다.
사용자 뷰는 django-mptt 사용자 view를 참고.
2 comments
ancestors = [i.slug for i in ancistors]
위 코드에 ancistors가 ancestors 아닌가요?
Author
네.. 맞네요..
수정했습니다.
지적 고맙습니다.