2013-04-29 42 views
0

我有這些模型:Django的:返回所有作者撰寫的所有書籍

class Author(models.Model): 
#id   = models.IntegerField(blank=True) 
code   = models.CharField(verbose_name="Author Code", max_length=100, unique=True) 
firstname = models.CharField(verbose_name="First Name", max_length=200) 
lastname  = models.CharField(verbose_name="Last Name",max_length=200) 

#Optional Fields 
middlename = models.CharField(verbose_name="Middlename", max_length=200, null=True, blank=True) 
email  = models.EmailField(verbose_name="Author's Email",max_length=75, null=True, blank=True) 
sex   = models.CharField(verbose_name="Sex", max_length=1, choices=(('M', 'Male'), ('F', 'Female')), null=True, blank=True) 
salutation = models.CharField(verbose_name="Salutation",max_length=10, null=True, blank=True) 
suffix  = models.CharField(verbose_name="Suffix", max_length=10, null=True, blank=True) 

def __unicode__(self): 
    return u'%s %s (%s)' % (self.firstname, self.lastname, self.code) 


class Book(models.Model): 
#book title 
#book_id    = models.IntegerField(blank=True) 
title   = models.CharField(verbose_name="Book Title", max_length=200) 
subtitle  = models.CharField(verbose_name="Book Subtitle", max_length=200, null=True, blank=True) 

#Reference information 
accession_number = models.CharField(verbose_name="Accession Number", max_length=100) 
call_number = models.CharField(verbose_name="Call Number", max_length=100) 
isbn   = models.CharField(verbose_name="ISBN Code", max_length=100, null=True, blank=True, unique=False) 
dewey_class = models.ForeignKey(DeweyClass, verbose_name="Dewey Class", null=True, default=False, unique=False) 
subject  = models.CharField(verbose_name="Subject", max_length=100) 

#authorship information 
author   = models.ManyToManyField(Author, verbose_name="Book Author") 
pages   = models.IntegerField(verbose_name="Number of Pages") 
edition  = models.CharField(verbose_name="Edition", max_length=100, null=True, blank=True) 
volumes  = models.CharField(verbose_name="Volume Number", max_length=100, null=True, blank=True) 

現在,在前端,我想與他們做了書顯示作者的列表,一起。

是這樣的:

J.R.R.托爾金

  • 的指環王
  • 霍比特人

回答

0

可以使用重組模板標籤:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#regroup

在您的視圖:

books_qs = Book.objects.all() 

books = [] 
for book in books_qs: 
    for author in book.author.all(): 
     books.append({'title' : book.title, 'author' : author.lastname}) 

在你的模板:

{% regroup books by author as author_list %} 

<ul> 
{% for author in author_list %} 
    <li>{{ author.grouper}} 
    <ul> 
    {% for item in author.list %} 
     <li>{{ item.title}}</li> 
    {% endfor %} 
</ul> 
</li> 
{% endfor %} 

+0

此標記似乎只在列表工作。 我想要達到這樣的效果: http://lms.ndmc.edu.ph/opac/authors/?q=A – 2013-04-29 08:39:24

+0

重組標記也可以在查詢集上工作。在你的例子中,它不起作用,因爲作者和書籍之間的關係是ManyToMany字段。如果您可以切換到ForeignKey字段,那麼在視圖中必須將查詢集轉換爲適當的列表。 – Ponytech 2013-04-29 11:32:59

+0

我已經更新了我的答案,以使其與M2M關係一起工作 – Ponytech 2013-04-29 11:39:44