2013-02-14 4 views
1

장고의 클래스 기반 뷰 (매우 새로운 것), 특히 ListView를 이해하려고합니다. 나는 비즈니스 논리가 어디로 가야 하는지를 이해하기 위해 고심하고있다. 예를 들어 말해, 나는 다음과 같은 클래스가 : 그것은 잘 작동하고 난 볼 수 있어요listview 클래스에 비즈니스 로직을 포함 할 곳 클래스 메소드

#views.py 
class DisplayListView(ListView): 
    model = Cars 
    template_name = "searchres_list.html" 
    paginate_by = '5' 
    context_object_name = "titles" 

def get_context_data(self, **kwargs): 
    context = super(SearchDisplayListView, self).get_context_data(**kwargs) 
      # custom logic whoch spits out "now". in this example [1 -->10] 
    context['now'] = [1,2,3,4,5,6,7,8,9,10] 
    return context 

- 내 템플릿 [1> 10]을. 그러나 ListView에서 사용할 수있는 메서드를 살펴보면 get_queryset 메서드에 내 논리를 포함시킬 수 있음을 알았습니다. 그래서, 뭔가 같은 : 데프 get_context_data

  1. :

    def get_queryset(self): 
        # Fetch the queryset from the parent get_queryset 
        queryset = super(SearchDisplayListView, self).get_queryset() 
          # custom logic whoch spits out "now". in this example [1 -->10] 
        queryset = [1,2,3,4,5,6,7,8,9,10] 
          return queryset 
    

    그래서, 내 대신 (바보) 질문 (! 아니면 모든 완전히 잘못이 가지고있다), 어디 비즈니스 로직이 이상적으로 가야한다입니다

  2. def get_queryset

감사합니다.

답변

2

아마도 이러한 주관적인 질문에 대한 최선의 대답은 다음과 같습니다. 템플릿에 전달 될 상황에 무언가를 추가해야하는 경우

  • 이, 당신이없는이 같은 상황을 다루는

    내 개인적인 알고리즘은 다음과 같다 실제로는 get_queryset 메서드에서 ListView에 대한 쿼리 세트 만 수정할 수 있기 때문에 실제로 선택해야합니다. 그래서이 경우 get_context_data를 사용합니다.

  • 하지만 당신은 아마 당신이 get_queryset을 덮어 쓸 필요의가보기 비슷한 모델 클래스에서 작동 할 수 있습니다 및 실제 클래스가보기에 전달 된 인수에 의해 결정됩니다 가정 해 봅시다, 일부 동적 검색어 세트 수정을 수행하려고하는 경우 방법. 나는 그러나 당신의 첫 번째 점을 이해하지 못하는 - - 당신은 get_queryset 방법에 당신은 단지를 수정할 수 있기 때문에 "무엇을 의미합니까

희망 나는 당신에게 주제 : 그것에 대해 너무 많이

+0

덕분에 몇 가지 통찰력을 준 귀하의 ListView에 대한 queryset "이걸 설명해 주시겠습니까?. 보시다시피, 쿼리 세트 나 컨텍스트 데이터를 템플릿에 전달할 수 있습니다. 템플릿 태그 이외에 모든 것이 데이터 쿼리 세트 나 컨텍스트에 관계없이 모든 것이 정상적으로 작동하는 것처럼 보입니다. 그렇지 않은가요? – AJW

+0

그래서''queryset'' 속성을''get_queryset'' 메소드에서 변경하면 기본적으로 템플릿의''object_list''가 변경됩니다. ''get_queryset''에서 컨텍스트에 폼 객체를 추가 할 수 없습니다. 이를 위해서''get_context_data''를 사용해야합니다. – dragoon

+0

고마워요 - 지금이 점을 이해합니다! 수락 대답 :) – AJW