2012-12-12 1 views
0

newb 나는 어디에 속해 있는지 알아 내려고 노력 중이다. 나는 시스템의 모든 사용자를 나열하는 ListView있어, 그것은의 라인을 따라 - 비슷한 get_queryset 방법을 포함 : 나는에서이 사전을 만들고있어 사용자의 검색어 세트를사전을 템플릿에 전달해야합니까?

def get_queryset(self): 
    users = [] 
    for user in User.objects.all(): 
     a_user = {}    
     a_user['username'] = user.username 
     a_user['full_name'] = user.get_full_name() 
     a_user['num_of_friends'] = len(user.friends.all()) 
     a_user['phone_num'] = user.get_profile().phone_num 

     a_user['has_subscription'] = bool(Subscription.objects.filter(subscriber=self.request.user)) 

     users.append(a_user) 
    return users 

그래서보다는 반환 각 사용자의 다양한 속성을 선택할 수 있으며 템플릿 디자이너가 얻는 것은 내가 갖고 있어야한다고 생각하는 것만으로 제한됩니다.

대신에 사용자 개체를 템플릿에 전달하고 템플릿 작성자가 필요로하는 것을 얻을 수있게하는 것이 더 좋습니까? 대답은 '예'라고 생각합니다.

위의 내용은 a_user['has_subscription']에 해당 할 때 대답이 아니오라고 가정합니다.

답변

1

당신이 해낸 방법은 완전히 좋습니다. 뷰에서 템플릿에 필요한 정보를 명시 적으로 제공하여 내 모델을 내 모델과 분리하는 것이 유용하다는 것을 알았습니다. 이는 본질적으로 수행 한 작업입니다. get_queryset이라는 메서드에서 실제 쿼리 세트를 반환하지 않는 것은 약간 이상하지만, 현재 과 같은 비판을 기반으로 결론을 내 렸습니다. 클래스 기반 뷰는 현재 장고에서 구현되어 있으므로 해당 메소드를 고려해야합니다. 끝으로, 독창적 인 방식으로 귀하의보기 코드를 조직하는 것과는 대조적입니다. 추상화는 Django ORM처럼 간단하지 않습니다.

조금 더 매끄럽게하려는 경우 values 메서드를 사용하여 쿼리 집합을 좁히고 구독 수에 추가 할 주석을 추가 할 수 있습니다. 그러나 아마도 많은 점은 없습니다.

0

'사용자'배열을 사용하여 수행하려는 작업에 따라 다릅니다. 템플릿을 편집하는 사람은 특정 방식으로 데이터를 스타일 지정하고 표시 할 수 있습니다. get_queryset 함수는 템플릿에 대한 데이터를 제공 할 수 있습니다.

관련 문제