2016-07-21 6 views
0

Wie kann ich in einer Vorlage die Attribute anzeigen, die von einem ManyToManyField eines Modells stammen?ManyToManyField-Attribute eines bestimmten Modells in Vorlage anzeigen

models.py

class Group(models.Model): 
    name = models.CharField() 
    user = models.ManyToManyField(User, related_name='user_group') 

class Team(models.Model): 
    name = models.CharField() 
    group = models.ManyToManyField(Group, related_name='group_team') 

views.py

class Index(ListView): 
    template_name = 'App/index.html' 
    model = User 

    def get_queryset(self): 
     return User.objects.filter(...) 

Vorlage

{% for user in user_list %} 
    {{ user.username }} 
    {{ user.user_group.name }} 
    {{ user.user_group.group_team.name }} 
{% endfor %} 

kann ich den Benutzernamen o zeigen f den Benutzer, aber nicht den Rest der Felder.

Antwort

2

Da ein ManyToMany Beziehung viele alle Objekte haben kann ich tun musste, ist Iterierte über sie:

{% for group in user.user_group.all %} 
    {{ group.name }} 
{% endfor %} 

aktualisieren: Wie Todor Zugabe schlägt prefetch_related vermeiden unnötige Datenbank

User.objects.filter(...).prefetch_related('user_group') 
+1

abfragt In Ihrem "get_queryset" prefetch 'user_groups' von:' User.objects.filter (...). Prefetch_related ('user_group') ', wird auf diese Weise keine Abfrage pro Benutzer durchgeführt, um alle seine Gruppen zu erhalten. – Todor