2017-02-26 74 views
0

我想要列出與故事相關聯的文章列表,以便在故事專用的行上呈現故事。目前該模板僅返回來自上一個故事的文章在三個不同的行上。編寫和理解的代碼是:將query_set的列表呈現爲html模板上的行

許多文章可以屬於一個故事。 /models.py

class Story(models.Model): 
    title = models.CharField(max_length=200, default= "") 
    description = models.TextField() 
    publication_date = models.DateTimeField() 

class Article(models.Model): 
    feed = models.ForeignKey(Feed) 
    title = models.CharField(max_length=200) 
    url = models.URLField() 
    publication_date = models.DateTimeField() 
    story = models.ManyToManyField(Story, default=None, blank=True) 

使用查詢,得到所有story_ids的列表。如果story_id_lst中的條目等於文章中的story_id,則將該故事附加到行列表中。

/views.py

def articles_list(request): 
    articles = Article.objects.all() 
    story_id_lst = articles.values_list('story').distinct() 
    for entry in story_id_lst: 
     rows = articles.filter(story=entry) 

運行在shell代碼返回三個列表,一個空的,一個與匹配的故事1和一個與匹配的所有文章,故事2.我認爲這個問題的所有文章在下面的代碼中。

/views.py

return render(request, 'news/articles_list.html', {'rows': rows}) 

/articles_list.html

<div class="container" style="background-color: #DCDCDC; border-radius: 25px;"> 
<div class="row"> 
{% for row in rows %} 
<div class="col-md-12"> 
    {% for entry in row %} 
    <div class="container-fuild"> 
     <div class="col-md-4" > 
      <h2>{{entry.title}}</h2> 
      <div> 
       <p><a href="{{entry.url}}" target="_blank" class="btn btn-primary">View Details</a></p> 
      </div> 
     </div> 
    </div> 
    {% endfor %} 
</div> 
{% endfor %} 
</div> 
</div> 
+1

您的看法是這樣FUBAR我甚至不知道從哪裏開始(除了前行似乎是錯誤的如果你想實現「許多文章可以屬於一個故事」(你已經實現了「一篇文章可以屬於這個文章到0或更多的故事「。 – thebjorn

+0

我不應該在我的視圖中使用查詢,或者不將查詢放置在列表中?你能指出我如何清理/修復它嗎? – CornCob

回答

0

我看你做了你的問題廣泛變化..

如果一個項目可以屬於單件物品,那麼物品應該有一個外鍵給Story(不是多對多關係):

class Story(models.Model): 
    title = models.CharField(max_length=200, default= "") 

class Article(models.Model): 
    story = models.ForeignKey(Story, default=None, blank=True) 
    title = models.CharField(max_length=200) 
    url = models.URLField() 

那麼該視圖可以寫成:

def articles_list(request): 
    articles = Article.objects.all() 
    return render(request, 'news/articles_list.html', {'articles': articles}) 

和模板:

{% regroup articles by story as story_list %} 

<ul> 
{% for story in story_list %} 
    <li>{{ story.grouper }} 
    <ul> 
     {% for article in story.list %} 
      <li><a href="{{ article.url }}">{{ article.title }}</a></li> 
     {% endfor %} 
    </ul> 
    </li> 
{% endfor %} 
</ul> 
+0

這是比我更好的方法。 – CornCob