2013-07-20 4 views
1

사용자에게 "즐겨 찾기"관계가 여러 개인 문서 모델이 있습니다. 검색 페이지에 문서 목록을 표시 할 때 현재 사용자에게 각 문서가 즐겨 찾기인지 여부를 표시하고 싶습니다. 나는이 일을하는 두 가지 방법을 알고 있습니다. 하나는 더 효율적이고 하나는 더 깨끗합니다. 나는 그것을 할 수있는 또 다른 방법이 있다면 그것이 효율적이고 깨끗한 지 궁금합니다.Django 템플릿에서 M2M 관계 쿼리

  1. 깨끗한 버전. 주어진 사용자가 문서를 선호 하는지를 알려주는 모델 "is_favored (user)"에 대한 메소드를 간단히 가지고 있어야합니다. 그런 다음이 함수를 사용하여 빈 별이나 채워진 별을 표시하는 간단한 템플릿 태그를 만듭니다. 물론 이것은 각 문서마다 다른 DB 호출을하기 때문에 효율적이지 않습니다. 그러나보기가 어떤 식 으로든 변경 될 필요가 없기 때문에 좋습니다.

  2. 효율적인 버전. 보기에서 단일 데이터베이스 쿼리를 수행하여 즐겨 찾는 쿼리를 검색하고 각 문서에 "선호"필드를 추가합니다. 문서를 표시하는 모든보기에 사용자 지정 코드를 추가해야하고 너무 건조하지 않기 때문에이 방법이 마음에 들지 않습니다.

DRY와 효율적인 두 가지 방법이 있습니까? 감사합니다. .

답변

1

컨텍스트 프로세서은 당신이 찾고있는 것입니다. 여기

당신은 그것에 대해 읽을 수 있습니다 : http://www.djangobook.com/en/2.0/chapter09.html이 (RequestContext 및 상황에 맞는 프로세서 섹션을 확인)


편집 :

또한 단순히 사용자와 목록을받는 함수를 만들 수 있습니다 현재 검색 결과에 표시되는 문서 수 다음과 같은 내용 :

이제는 주어진 ID를 가진 문서가 가장 좋아하는지 여부를 나타내는 사전이 있습니다. 그런 다음 각 뷰에서 해당 함수를 호출하고 그 결과를 사용하십시오.

지금은 (당신이 단 하나의 변화를해야 할 "즐겨 찾기"속성의 철의 이름을 변경하려는 경우에 발생합니다. 나는 내가에 전달하고있는 문서에 액세스 할 수 있다고 생각하지 않습니다

+0

을 건조 문맥 가공업자에있는 템플렛. 나는 각 문서에 "마음에 드는"가변을 추가하기 위하여 그것을 필요로한다. –