2015-07-12 64 views
0

我對django和python都很陌生。如何在Django模板中顯示兩個列表?

這在示例代碼我提出了,說明我的問題:

模型

class Book(models.Model): 
    submitted_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='book_subby') 
    submitted_date = models.DateField(auto_now=True) 
    book_title = models.CharField(max_length=200) 
    book_publisher = models.ForeignKey(Publishers) 


class Publishers(models.Model): 
    submitted_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='publisher_subby') 
    submitted_date = models.DateField(auto_now=True) 
    book_publisher = models.CharField(max_length=200) 

查看

def book_list(request): 
    books = Book.objects.filter(submitted_by=request.user, submitted_date__lte=timezone.now()).order_by('submitted_date') 
    books_by_publisher = 
    return render(request, 'book/list_books.html', { 
     'books': books 
     }) 

模板list_books.html

{% for book in books %} 
    <ul> {{ book.book_publisher }} 
    <li> {{book.book_title }} </li> 
{% endfor %} 

這顯示:

發佈商X
*教科書
出版商ý
*書B
發佈商X
*預訂Ç
出版商ý
*書d

我想顯示:
出版商X
*書A
*書ç

出版商Ÿ
*書B
*圖書d

我嘗試做多爲模板的循環,但不能使它工作。 如果有人能在正確的方向上推動我如何解決這個問題,我將不勝感激。 謝謝,安德烈

+1

作爲第一步,您將不得不按照服務器端的發佈者對您的圖書進行分組。 –

+0

是的,我一直在想辦法在視圖中這樣做。任何提示將我推向正確的方向? – Andreas

+0

見下文。您想在服務器上進行分組:) –

回答

0

你可以做這樣的事情:

模型

class Book(models.Model): 
    submitted_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='book_subby') 
    submitted_date = models.DateField(auto_now=True) 
    book_title = models.CharField(max_length=200) 
    book_publisher = models.ForeignKey(Publishers, related_name='books') 

    class Meta: 
     ordering = ['submitted_date'] # To keep this sorted by this field 

查看

def book_list(request): 
    publishers_with_books = Publishers.objects.prefetch_related('books').filter(submitted_by=request.user, books__isnull=False, books__submitted_date__lte=timezone.now()) 
    return render(request, 'book/list_books.html', { 
     'publishers': publishers_with_books 
     }) 

模板list_books.html

{% for publisher in publishers %} 
    <ul> {{ book.book_publisher }} 
     {% for book in publisher.books.all %} 
      <li> {{book.book_title }} </li> 
     {% endfor %} 
    </ul> 
{% endfor %} 

希望這對你有幫助;)。

+0

由於它完成了這項工作,'publisher.books.all'會觸發每個發佈者的數據庫,如果發佈者的總數相當高,則可能導致嚴重的性能問題。 – ozgur

+0

這只是一個解決方案,這當然可以改進@ozgur。 –