2016-08-18 5 views
2

私は今、私は、リストビューを使用してすべての書籍をリストアップしていますmodels.pyアクセス方法Djangoのクラスベースのビューで、多対多のフィールドにアクセスするには?

class Author(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=40) 
    email = models.EmailField() 
    age = models.IntegerField() 

def __str__(self): 
    return '%s %s' %(self.first_name, self.last_name) 

def __unicode__(self): 
    return '%s %s' %(self.first_name, self.last_name) 



class Book(models.Model): 
    title = models.CharField(max_length=100) #name = title 
    pages = models.IntegerField() 
    price = models.DecimalField(max_digits=10, decimal_places=2) 
    rating = models.FloatField() 
    author = models.ManyToManyField(Author) 
    publisher = models.ForeignKey(Publisher) 
    publication_date = models.DateField() 

def __str__(self): 
    return self.title 

def __unicode__(self): 
    return self.title 

に二つのモデル、著者&ブックを持っています。そして、この本のクリック時に私はすべての作家になっ

class BookDetailView(generic.DetailView): 
    template_name = 'books/book_detail1.html' 
    model = Book 
    context_object_name = 'book_detail' 

は、私は、タイトル、ページ、価格、評価、出版社& PUBLICATION_DATEにアクセスすることができるよ、次の方法で使用して書籍情報を取得しますがないよ(著者一覧) 。私は単にそれを印刷するつもりですが、テンプレートにNoneを表示します。私も誰もこれからの私を助けることができるループのために使用して反復処理しようとしたが、テンプレート

views.py

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<ul> 
    <li>Price:{{ book_detail.price }}</li> 
    <li>Pub Date:{{ book_detail.publication_date }}</li> 
    <li>Title: {{ book_detail.title }}</li> 
    <li>Pages: {{ book_detail.pages }}</li> 
    <li>Rating: {{ book_detail.rating }}</li> 
    <li>Publisher: {{ book_detail.publisher }}</li> 
    <li>Author: {{ book_detail.author }}</li> 
</ul> 

</body> 
</html> 

で行われていませんか?

+0

もう少し情報が必要ですが、テンプレートからどのように著者にアクセスしようとしていますか?あなたは{{book.author.all}}かそのようなものをループする必要があります。 –

+0

テンプレートコードを教えてください... – solarissmoke

+0

@solarissmoke編集 –

答えて

6

BookAuthorの間に多対多の関係が定義されています。つまり、1つの本に任意の数の作者を含めることができます。それらを表示するためには、著者のセットをループする必要があります。

Authors: 
<ul> 
{% for author in book_detail.author.all %} 
    <li>{{ author }}</li> 
{% endfor %} 
</ul> 

あなたはそれほど混乱するauthorsにそのフィールドの名前を変更したい場合があります。

また、書籍の著者が1人だけの場合は、ManyToManyFieldの代わりにForeignKeyを使用する必要があります。その場合、既存のテンプレートロジックが機能します。

+0

働いています。ありがとう –

関連する問題