2012-02-29 4 views
4

하위 하위 범주 : 처음에는장고 범주, 하위 범주 나는 간단한 분류 모델이

class Category(models.Model): 
    name = models.CharField(max_length=200) 
    slug = models.SlugField() 
    parent = models.ForeignKey('self', blank = True, null = True, related_name="children") 

, 내 데이터는 범주와 하위 범주가 필요 듯,하지만 난 경우가 있음을 깨달았 나는 여전히 하위 하위 카테고리로 분류하려고합니다.

는 내 URL을 카테고리/하위 카테고리/하위 하위 범주에게 내가 이것을 구현하는 방법에 대해 생각했다

되고 싶어하지만 내 URL 패턴 매칭은 다음과 같습니다 이후는 확실하지 않다 :

url(r'^business/(?P<parent>[-\w]+)/(?P<category_name>[-\w]+)$', 'directory.views.show_category'), 

기본적으로 하나의 하위 카테고리 만 허용합니다. 내보기 메소드가이 두 매개 변수를 허용하기 때문입니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

12

무제한 레벨은 어떻게됩니까? urls.py에서 :

url(r'^business/(?P<hierarchy>.+)/', 'directory.views.show_category') 

그리고 디렉토리/views.py에서

:
def show_category(request, hierarchy): 
    category_slugs = hierarchy.split('/') 
    categories = [] 
    for slug in category_slugs: 
     if not categories: 
      parent = None 
     else: 
      parent = categories[-1] 
     category = get_object_or_404(Category, slug=slug, parent=parent) 
     categories.append(category) 
    ... 

이 Category.Meta에 unique_together = ('slug', 'parent',)을 추가하는 것을 잊지 마십시오, 그렇지 않으면 당신은 운명을 정한다.

[업데이트]

내가 그냥 하위 범주 우리를이 [-1] 얻어진 카테고리에 아이가없는 경우, 우리는 그에게 잎의 범주를 알고, 그렇지 않으면, 우리가 알고 category_slugs와 DB를 조회 할 수 있습니다 보여줘? -

@alexBrand을 alexBrand 다음 가상 URL을 고려 :

/business/manufacture/frozen/pizza/ 
/business/restaurant/italian/pizza/ 
/business/delivery-only/italian/pizza/ 
/business/sports/eating-contest/pizza/ 

당신이 (전체 계층 구조없이) 간단한 테스트가 충분하지 않습니다 다음 IMHO, 이러한 시나리오가 가능하다고 생각합니다.

제안 된 솔루션에 대한 귀하의 실제 관심사는 무엇입니까? 루프가 끝나면 변수 카테고리에 올바른 category_slugs[-1]이 저장되며 전체 계층 구조는 categories으로 설정됩니다. 성능에 대해 걱정하지 마라. 나의 가장 좋은 충고는 : 프로파일 링하기 전에 우아한 솔루션을 최적화하려고하지 말라는 점이다 (놀랄 것이다).

+0

나는 category_slugs [-1]로 db를 쿼리 할 수 ​​있었고 획득 된 카테고리에 자식이 없다면 잎 카테고리를 알았지 않으면 하위 카테고리가 있다는 것을 알았지? – AlexBrand

+0

@alexBrand : 업데이트 된 답변을 참조하십시오. –

+0

당신은 완전히 옳습니다. 다른 카테고리에서 동일한 하위 카테고리 이름을 가질 가능성에 대해서는 생각하지 않았습니다. – AlexBrand