2009-06-25 4 views
0

FAQ 프로젝트가있는 프로젝트가 있습니다. 이 응용 프로그램에는 FAQ (사이트 작성자가 작성) 및 UserFAQ (사용자가 작성한 - 영리한 이름) 모델이 있습니다. 특정 조건과 일치하는 모든 항목, FAQ 또는 UserFAQ를 반환하려고하지만 특정 조건과 일치하지 않는 UserFAQ도 제외하고자합니다. 이상적으로는 다음과 같습니다.장고에서 클래스와 서브 클래스 필터링하기

faqs = FAQ.objects.filter(question__icontains=search).exclude(show_on_site=False) 

여기서 "show_on_site"는 UserFAQ 개체 만 가진 속성입니다. 필터가 속성을 가지고 있지 않기 때문에 부모 클래스에서 쓰레기가 나오므로 작동하지 않습니다. 이 일을하는 가장 좋은 방법은 무엇입니까? 내가 this snippet에 왔지만, 내가하고 싶은 일 때문에 잔인한 것처럼 보입니다.

답변

1

두 개의 테이블이 필요없는 경우, is_user_faq 및 show_on_site 필드로 하나의 FAQ 모델/테이블을 가지게됩니다.

가끔 데이터를 모델링하여 간단하고 빠른 액세스를 위해 구성 할 때 도움이됩니다. 모델 상속은 몇 가지 매력을 가지고 있지만, 나는 그것을 사용하는 것을 피하는 것이 더 쉽다는 것을 발견했다.

+0

나는 그 대답을 정말로 신경 쓰지 않는다. 프레임 워크에서 최상의 솔루션이 OOP 원칙을 깨뜨리는 것이라면 나쁜 프레임 워크가 될 것입니다. Django 1.1에 대한 해결책이있는 것 같습니다. 난 그냥 queryset 밖으로 일부 항목을 필터링하는 방법을 찾고 있어요; 개체의 디자인을 깨는 것이 최상의 솔루션이 될 수 없습니다. – Tom

+2

@Tom "break"와 같은 단어로 조심하십시오. OO 디자인을 관계형 데이터 저장소 (OO가 아닌)에 매핑하려고합니다. 이것은 근본적으로 어려운 일이며 추상화가 누출됩니다. 비즈니스 개체에 대한 상속 기반 디자인을 선호 할 수도 있지만 데이터 저장소와 더욱 밀접하게 매핑되는 디자인을 "디자인 파괴"가 아닌 방식으로 다시 디자인하면 다른 디자인의 다른 장점을 사용할 수 있습니다 (예 : 당신은 ORM 한계보다 훨씬 덜한 머리를 쾅쾅 소리를냅니다.) 당신의 방법대로 할 방법이 없다는 말은 아니지만 이것은 꽤 합리적인 대답입니다. –

관련 문제