2017-03-07 3 views
0

나는 다음과 같은 모델이 있습니다 DetailView를 통해 내가 저자와 관련된 책을 표시하고장고 매겨진 마스터 - 세부

class Book(models.Model): 
    name = models.CharField() 
    authors = models.ManyToManyField('Author', blank=True, verbose_name=_('authors')) 

class Author(models.Model): 
    name = models.CharField() 

    def my_books(self) -> List[Book]: 
     return Book.objects.filter(authors__exact=self.id).all() 

:

class AuthorDetailView(generic.DetailView): 
    model = Author 

템플릿을, 내가 접근하고 책 주어진 저자 author.my_books() 방법을 통해 -하지만이 모든 행을 데이터베이스에서 가져옵니다.

책 행에 페이지 매김을하고 싶습니다.

어떻게 달성 할 수 있습니까?

업데이트 : this answer에 따르면 DetailView이 아닌 ListView을 서브 클래스로 지정하고 get_queryset()을 재정 의하여 책을 가져와야합니다. DetailView에서이를 수행 할 수있는 방법이 있습니까?

+0

페이지 매김을 처리 할 수있는'DetailView'에는 코드가 없습니다. 확실히 [Detailing]과 함께 [페이지 매김 도구] (https://docs.djangoproject.com/en/1.10/topics/pagination/)를 사용할 수 있지만, 다니엘이 제안한 'ListView'는 나에게 더 나은 접근 방법이라고 생각합니다. – Alasdair

+0

템플릿 파일의 책을 어떻게 순환시키고 있습니까? – tdsymonds

+0

죄송합니다. 템플릿에 잘못된 코드가있어서 모든 책이 반환되었습니다. – masroore

답변

0

나는 서브 클래스 ListView을 적절하게 따랐다.

URL 경로 :

url(r'^author/((?P<pk>\d+)/$', AuthorView.as_view(), name='author_detail'), 

CBV는 :

class AuthorView(generic.ListView): 
    model = Book 
    paginate_by = 2 

    def get_queryset(self): 
     pk = int(self.kwargs['pk']) 
     return Book.objects.filter(authors__id__exact=pk) 

    def get_context_data(self, **kwargs): 
     context = super().get_context_data(**kwargs) 
     pk = int(self.kwargs['pk']) 
     author = get_object_or_404(Author, pk=pk) 
     context['author'] = author 
     return context