2017-02-26 90 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