2017-09-05 21 views
1

私のテンプレートから外部キー要素にアクセスしようとしています。私はこのようなクラスビューを使用して複数のコンテキストを渡すためにしようとしています:複数のコンテキストを渡しながらdjangoのループ内でループする方法

class HomeView(ListView): 
    template_name = "homepage/home.html" 
    queryset = Author.objects.all() 
    def get_context_data(self, **kwargs): 
     context = super(HomeView, self).get_context_data(**kwargs) 
     context['author_links'] = Author_link.objects.all() 
     context['categories'] = Category.objects.all() 
     context['extra_links'] = Extra_link.objects.all() 
     context['poems'] = Poem.objects.all() 
     return context 

私のmodels.pyファイル:私は、コンテキストをループしようとしていたときに

class Author(models.Model): 
    name = models.CharField(max_length=30) 
    def __str__(self): 
     return self.name 

class Author_link(models.Model): 
    url_text = models.CharField(max_length=100) 
    url = models.CharField(max_length=200) 
    author = models.ForeignKey(Author) 
    def __str__(self): 
     return self.url_text 

class Category(models.Model): 
    name = models.CharField(max_length=100) 
    description = models.TextField() 
    class Meta: 
     verbose_name_plural = 'categories' 
    def __str__(self): 
     return self.name 

class Extra_link(models.Model): 
    url_text = models.CharField(max_length=100) 
    url = models.CharField(max_length=200) 
    category = models.ForeignKey(Category) 
    def __str__(self): 
     return self.url_text 

しかし、私はアクセスに見えることはできません各項目の外部キー:

{% for author in object_list %} 
    <li class = "collection-item"> 
    <ul class="collapsible" data-collapsible="accordion"> 
     <li> 
     <div class="collapsible-header">{{author.name}}</div> 
     <div class="collapsible-body"> 
      {% for item in author.item_set.all %} 
      <p>{{item.url}}</p> 
      {% endfor %} 
     </div> 
     </li> 
    </ul> 
    </li> 
    {% endfor %} 

私がやろうとしています、何が各著者に関連付けられているURLを介して著者ループの下に作者を通じて、同時にループです。 Author_linkからAuthorへの外部キーがあるので、あなたが

{% for item in author.item_set.all %} 
    <p>{{item.url}}</p> 
{% endfor %} 

はあなたが

{% for item in author.author_link_set.all %} 
    <p>{{item.url}}</p> 
{% endfor %} 

このマネージャ(author.author_link_set)のようなものを持っている必要があります持っている

+0

あなたのモデルには著者とカテゴリの間には関係がありません。そして、 'item_set'とは何でしょうか?正確には、各作者のために何を繰り返そうとしていますか? –

答えて

0

は各著者に追加されます。

サイドノート:Pythonのクラス名の規約は、たとえばAuthorLinkではなくAuthor_linkです。私はこれを言います。なぜなら、私が正しく作者の逆の関係の名前を推測していれば100%確信していないからです(それはauthor.authorlink_setかもしれません。モデル名のアンダースコアは見たことがない - その場合、djangoは特別なことをするかもしれません)

+0

ありがとうございます。出来た。このサイトにコードをコピーしている間に私が作った小さな間違いがありました。私は実際にやっていたものに変更しました。 –

+0

@SubhadeepSarkar 'queryset = Authorを使って多くのクエリを実行することを避けることができる作者がたくさんいる場合は、' {%if author.author_link_set.all%} class = "collapsible-body" {%endif%} ' .objects.all()。prefetch_related( "author_link_set") ' – Jiaaro

関連する問題