2017-08-03 1 views
0

Ich habe zwei Modelle, Kategorie und Themen. Jedes Thema gehört zu einer Kategorie (über Fremdschlüssel). Was ich in meiner Vorlage tun möchte, ist eine Kategorie anzuzeigen, und darunter werden alle Themen angezeigt, die in dieser bestimmten Kategorie abgelegt wurden. Hier ist meine models.py:Zeige Objekte und relevante Unterobjekte

class Category(models.Model): 
    name = models.CharField(max_length=55) 

class Topic(models.Model): 
    category = models.ForeignKey(Category) 
    name = models.CharField(max_length=55) 

Irgendeine Idee, wie ich dies erreichen kann? Vielen Dank.

+0

See [folgenden Beziehungen rückwärts] (https://docs.djangoproject.com/en/1.11/topics/db/queries/#backwards-related-objects). –

Antwort

1

Wie in den Kommentaren erwähnt, möchten Sie die Beziehung rückwärts folgen.

Ihrer Ansicht nach müssen Sie Ihre Kategorien auf die Vorlage übergeben, so etwas wie:

from django.views.generic import TemplateView 
from .models import Category 

class MyView(TemplateView): 
    template_name = 'path/to/my/template.html' 

    def get_context_data(self, **kwargs): 
     context = super().get_context_data(**kwargs) 
     context['categories'] = Category.objects.all() 
     return context 

Dann in Ihrer Vorlage können Sie das erreichen, wie folgt:

{% for category in categories %} 
    <h3>{{ category.name }}</h3> 
    <ul> 
     {% for topic in category.topic_set.all %} 
      <li>{{ topic.name }}</li>  
     {% endfor %} 
    </ul> 
{% endfor %} 
Verwandte Themen