2010-12-02 2 views
3

장고 : 간단한 계층 구조를위한 최선의 방법은?

class Category(models.Model): 
    name = models.CharField() 
    description = models.CharField(blank=True) 
    parent = models.ForeignKey('self', blank=True, null=True) 

장고가 계층 구조와 관련하여 범주를 정렬하도록하려면 다음과 같이하십시오.

  • 부모 1
    • 자식 1
  • 부모 2
      어린이 1

    몇 가지 조사를 해보니 treebeard.al_tree와 Django MPTT라는 두 개의 앱이 성능이 우수하거나 유지 관리가 어려울 수 있습니다.

    웹 사이트의 사이드 바 및 관리 페이지 (카테고리의 게시물에 ForeignKey 포함)에 카테고리를 표시합니다. 범주에 대한 추가/수정/삭제가 거의 없으며 대부분 읽기만 성능에만 영향을주지 않습니다.

    위보다 간단하고 단순한 다른 앱이 있습니까? 관리자 또는 다른 것을 사용하여 추가 앱없이 Django를 사용하여 이것을 수행 할 수 있습니까?

+1

MPTT를 사용하지 않아도 코드를 살펴봄으로써 MPTT가 어떻게 작동하는지 알 수 있습니다. –

+0

좋은 생각, 고마워. – Someone

답변

4

django-mptt와 같은 앱을 사용하는 데 어떤 단점도 보이지 않습니다. 실제로 제공되는 메서드는 계층 적 구조로 쿼리를 수행 할 때 성능을 극대화하도록 최적화되어 있습니다. 유지 보수성 및/또는 성능에 대해 걱정할 이유가 없으며 사용하기가 쉽습니다!

+0

감사합니다. django-mptt를 사용합니다. – Someone

4

MPTT 또는 treebeard는 보다 낮은 성능을 나타낼 수 있습니까? 무의미한 말. 이 앱의 요점은 매우 최적화 된 알고리즘을 제공한다는 것입니다. 성능을 크게 향상시킵니다. MPTT를 사용하면 별도의 호출이 많이 필요한 단일 데이터베이스 작업으로 전체 트리 또는 하위 섹션을 가져올 수 있습니다.

+0

요점은 많은 옵션이있는 큰 앱이 특정 요구 사항이있는 간단한 앱보다 느릴 수 있다는 것입니다. 이제 django-mptt를 사용할 것입니다. 감사. – Someone

2

MPTT를 사용하면 시스템을 수행 할 수 있습니다. 직접 구현할 때 노드를 수동으로 연결 (~ 30 회선 기능)하거나 모든 하위 레벨에 대해 개별 쿼리를 수행 할 수 있습니다. 수작업으로 많은 일을 해왔습니다.

MPTT 알고리즘을 사용하면 하나의 쿼리에서 하위 트리를 가져올 수 있습니다. 계층 적 데이터를 저장하는 일반적인 알고리즘입니다.

Django MPTT (특히 v0.4)에는 admin 및 템플릿에이 모든 데이터를 올바르게 표시 할 수있는 유용한 API가 있습니다. 바퀴를 재발 명할 필요가 없습니다.

+0

감사합니다. django-mptt를 사용합니다. – Someone

관련 문제