2012-02-08 58 views
0

我試圖將多個模型(外鍵)的數據顯示爲表格格式。在Django的平板表中列出來自多個模型的數據

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

class Book(models.Model): 
    title = models.CharField(max_length=250) 
    isbn = models.CharField(max_length=250) 
    author = models.ManyToManyField(Author) 

預期輸出:

  • 書1 - isbn1 - 作者1
  • 書1 - isbn1 - Author2
  • 書2 - isbn2 - Author3
  • 簿3 - isbn3 - 作者1

現在我可以使用各種過濾器查詢這兩個模型,並有相應的列表對象。如何在模板中使用較少的代碼顯示這兩個列表對象?

我可以想到的一種方法是遍歷這兩個列表,並創建一個與列的相應鍵的字典列表,並將此列表傳遞給模板。有沒有更好的方法呢?

目前代碼

def getresult(params): 
    print "printing dict ", params 
    titles = params.getlist('titles') 
    authors_input = params.getlist('authors') 
    ... 
    books = Book.objects.all() 
    if len(title) > 0 : 
     books = books.objects.filter(title__in = titles) 
    ... 
    authors = Authors.objects.filter(name__in=books) 
    if len(authors_input) > 0 : 
     authors = authors.filter(name__in = authors_input) 
    result = [] 
    for book in books: 
     authors = authors.filter(name=book.author) 
     for author in authors: 
      output_item = {} 
      output_item['book_name'] = book.title 
      output_item['isbn'] = book.isbn 
      output_item['author'] = author.name 
      result.append(output_item) 
    return result 
+0

向我們展示你當前的代碼。 – Marcin 2012-02-08 06:24:52

+0

@Marcin當前的代碼發佈 – butters 2012-02-08 06:43:30

回答

1

由於這是一個常見的模式,有一個generic view是注意到了這一問題。代碼片段直接來自文檔,針對您的獨特情況進行了修改。

urls.py

from django.conf.urls.defaults import * 
from django.views.generic import ListView 
from myapp.models import Book 

urlpatterns = patterns('', 
    (r'^books/$', ListView.as_view(
     model=Book, 
    )), 
) 

創建一個名爲book_list.html在在在您TEMPLATE_DIRS的位置稱爲myapp某個目錄模板。

這段代碼模板(book_list.html)做你需要什麼:

<ul> 
{% for book in object_list %} 
    {% for author in book.author_set.all %} 
    <li>{{ book.title }}&mdash;{{ book.isbn }}&mdash;{{ author.name }}</li> 
    {% endfor %} 
{% endfor %} 
</ul> 
+0

我可以根據我的過濾條件過濾書籍和作者對象嗎? – butters 2012-02-08 06:42:56

+0

是的。閱讀關於通用視圖的[documentation](https://docs.djangoproject.com/en/1.3/topics/class-based-views/#generic-views-of-objects)。 – 2012-02-08 07:00:23

相關問題