본문으로 바로가기

list view 구현(multiple queryset list view)

category 장고/MTV 2019. 5. 16. 18:00

장고에서 모든 객체를 보여주는 view 를 작성하는 방법은 여러가지가 있다. 그 중에서 현재 사용했던(또는 리팩토링)으로 변경했던 내용들을 정리한다.


  • 기본 FBV 로 2개의 multiple 한 쿼리셋을 context 에 담아 템플릿으로 렌더링
  • 현재 모델링은 product 모델이 category 모델을 외래키로 참조하고 있어 category.product_set.all 과 같은 참조 방식으로도 사용이 가능하다.
  • 그러나 기본 이해를 위해 2개의 변수에 각각의 모델 쿼리셋을 담은 상태로 구현
def home(request):
    products = Product.objects.all()
    categories = Category.objects.all()
    context = {
        'products': products,
        'categories': categories,
    }
    return render(request, 'product/home.html', context)

  • TemplateView 에서 템플릿에서 사용할 context 변수에 각각의 모델 쿼리셋을 할당하여 사용
  • super() 함수를 사용하여 재귀함수를 방지하는 역할을 하자
class Home(TemplateView):
    template_name = 'product/home.html'

    def get_context_data(self, **kwargs):
        context_data = super().get_context_data(**kwargs)
        context_data['product_list'] = Product.objects.all()
        context_data['category_list'] = Category.objects.all()
        return context_data

# urls.py 에서 정의해도 되지만 class 인스턴스를 만들고 바로 url 에 str 타입으로 전달하기 위해 home 변수에 할당
home = Home.as_view()

'장고 > MTV' 카테고리의 다른 글

DRF 객체를 copy 하기  (0) 2019.06.22
django normalize_email  (0) 2019.06.21
장고 한줄 정리  (0) 2019.05.15
장고 CRUD 기능 구현(4) Delete  (0) 2019.05.07
장고 CRUD 기능 구현(3) Update  (0) 2019.05.07