2017-02-26 2 views
0

Je voudrais qu'une liste d'articles étiquetés associés à des histoires soit restituée sur des lignes exclusives à leur histoire. Actuellement, le modèle renvoie uniquement les articles de la dernière histoire sur trois lignes distinctes. Le code tel qu'écrit et compris est:Rendu de la liste de query_set en tant que ligne sur le modèle html

De nombreux articles peuvent appartenir à une même histoire. /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) 

Utilisation de requêtes, obtenir une liste de tous story_ids. Si l'entrée dans story_id_lst est égale à story_id dans les articles, ajoutez cette histoire à la liste des lignes.

/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) 

à exécuter ce code dans le shell retourne trois liste, un vide, un avec tous les articles adaptés à l'histoire 1 et une avec tous les articles adaptés à l'histoire 2. Je crois que le problème est quelque part dans le code suivant.

/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

votre point de vue est si fubar Je ne sais même pas par où commencer (tout sauf la première ligne semble mal d'une manière ou d'une autre). Quoi qu'il en soit, votre modèle d'article devrait avoir une clé étrangère à Story si vous voulez implémenter "De nombreux articles peuvent appartenir à une seule histoire" (vous avez implémenté "Un article peut appartenir à 0 ou plusieurs histoires ". – thebjorn

+0

Est-ce que je ne devrais pas utiliser de requêtes à mon avis, ou ne pas placer des requêtes dans des listes? Pourriez-vous me diriger dans la direction de la façon de le nettoyer/réparer? – CornCob

Répondre

0

Je vois que vous avez apporté des changements importants à votre question ..

Si un article ne peut appartenir à un Single Story, alors l'article doit avoir une clé étrangère à Story (pas une relation many-to-many):

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() 

alors la vue peut être écrit comme:

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

et le modèle:

{% 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

C'est une bien meilleure façon de s'y prendre que je le faisais. – CornCob