2016-03-22 5 views
0

views.py;Falsche Iteration in ForLoops in Django mit Querysets

cvs = Cv.objects.all() 
    cv = Cv.objects.filter(author = request.user) 
    per = Person.objects.all() 
    gr = Group.objects.filter(members__name=request.user) 
    perr = Person.objects.filter(name=request.user) 
    mem = Membership.objects.filter(group = gr, person = perr) 


    form = GroupForm() 


    context = { 
     'gr': gr, 
     'per':per, 
     'mem':mem, 
     'form': form, 
     'cvs':cvs, 
     'cv':cv, 

    } 

    return render(request, 'groups.html', context) 

models.py:

class Person(models.Model): 
    name = models.CharField(max_length=128) 

    def __str__(self):    # __unicode__ on Python 2 
     return self.name 


class Group(models.Model): 
    name = models.CharField(max_length=128) 
    members = models.ManyToManyField(Person, through='Membership') 
    description = models.TextField(max_length=350) 

    def __str__(self):    # __unicode__ on Python 2 
     return self.name 


class Membership(models.Model): 
    person = models.ForeignKey(Person) 
    leader = models.BooleanField(default=False) 
    group = models.ForeignKey(Group) 
    role = models.CharField(max_length=50) 

template.html:

{% for z in mem %} 
    <div class="jumbotron"> 
    <div class="jumbo2"> 
     <form method="POST" class="post-form"> {% csrf_token %} 
      <p id="name"><b>Groups name:</b> {{z.group}}</p><br> 

       {% for member in z.group.members.all %} 

         <p><b>Member:</b> {{member.name}} 

         {% if z.person.name == member.name %} 

         - {{z.role}}</p> 

         {% endif %}           

       {% endfor %} 

      </form> 

     </div> 
     </div> 

    {% endfor %} 

Wenn i Gruppe zu erstellen, ist meine Rolle "Team Leader", wenn ich jemanden in die Gruppe aufnehmen, Seine Rolle ist "Noob". Ich möchte alle Mitglieder der Gruppe und ihre Rollen anzeigen. Das Problem ist: meine tatsächliche Leistung ist:

damian - Team leader 
test     <- and no role, but should be "Noob" 

Was ich will, bekommen:

damian - Team Leader 
test - Noob 

Jeder knwo wie diese zu lösen? Danke für jede Hilfe!

Antwort

0

Es ist ein wenig schwer, Ihren Code wegen der kryptischen Variablennamen wie z zu verstehen.

Das Problem scheint zu sein, dass Sie nur die Rolle drucken, wenn die z.person.name == member.name.

Wenn Sie diese Bedingung aus der Schleife entfernen, werden alle Rollen in der Gruppe angezeigt und nicht nur eine. Aber um das zu tun, müssen Sie die Rolle durch das Objekt member anstelle des z Objekts

+0

nachschlagen Aber wie? Ich kann dem Member im Modell keine Eigenschaften "role" hinzufügen. Oder vielleicht habe ich dich nicht verstanden. – Damian

+0

Sorry, ich habe mich mit dem Namen der Mitgliedsvariablen und dem Mitgliedschaftsmodell herumgeschlagen. Schauen Sie hier: http://StackOverflow.com/Questions/3368442/How-Doi-Access-the-Properties-of-a-Many-To-Many-Through-Table-From-A-Django-t es sieht sehr ähnlich zu Ihrer Frage und wird wahrscheinlich eine bessere Antwort als das, was ich bieten kann. – xthestreams

+0

Okay, danke Alter – Damian