2016-03-22 21 views
1

Wie kann ich nur meine Mitgliedschaft einstellen, anstatt alle in for-Schleife?Wie greife ich auf die Eigenschaften eines Viele-zu-Viele mit Mitgliedschaft in Django zu?

template.html:

  {% for g in gr %} 

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

       {% for membership in g.membership_set.all %} 

         <p><b>Member:</b> {{ membership.person }} - {{ membership.role }}</p>        

       {% endfor %} 






       <br> 
       <span class="desc2">Groups description:</span> 
       <p id="desc">{{g.description}}</p><br> 



       {% for membership in g.membership_set.all %} 

         {% if membership.leader == False %} 
         <button style="float: right" type="submit" name = "leave" value = "{{g.name}}" class="save btn btn-default">Leave</button> 
         {% elif membership.leader == True %} 
         <button style="float: right" type="submit" name = "delete" value = "{{g.name}}" class="save btn btn-default">Delete</button> 
         {% endif %} 

       {% endfor %} 
       </form> 
       <br><br> 
       <p></p> 



       </div> 
       </div> 

      {% endfor %} 

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) 

Meine Tasten sind so viele, wie ich in irgendeiner Gruppe haben Benutzer displeyed. Ich möchte nur 1 Schaltfläche anzeigen, und ich muss ForLoop nur für meine Mitgliedschaft in dieser Gruppe präzisieren. Wie kann ich das machen?

+0

Was meinen Sie mit "Meine Mitgliedschaft"? Es ist völlig unklar. Kannst du deine Modelle auch posten? –

+0

Ich meine, dass die Schleife {% für die Mitgliedschaft in g.membership_set.all%} alle Mitgliedschaften in einer Gruppe durchläuft. Und deshalb, wenn ich überprüfen möchte, ist meine Mitgliedschaft (meine Person in dieser Gruppe) Leader-Feld auf True oder False, aber diese Schleife, was ich jetzt habe, durchläuft alle Mitglieder (alle Mitgliedschaften) in dieser Gruppe. Ok, ich ändere und füge Modelle hinzu – Damian

Antwort

0

Ich glaube nicht, dass Sie dies nur mit Standard-Vorlagencode tun können. Sie müssen Ihr Membership Objekt erhalten, indem die Mitgliedschaften Filterung wie so:

membership = my_person.membership_set.get(group=my_group) 

dies in der Vorlage zu tun, würden Sie Ihre own template filter, die auf das my_person Objekt arbeitet und nehmen das my_group Objekt als Parameter schreiben. Der Filter könnte dann die obige Abfrage anwenden und das Mitgliedschaftsobjekt zurückgeben.

{% with membership=my_person|get_group_membership:g %} 
    {% if membership.leader == False %} 
     <button style="float: right" type="submit" name = "leave" value = "{{g.name}}" class="save btn btn-default">Leave</button> 
    {% elif membership.leader == True %} 
     <button style="float: right" type="submit" name = "delete" value = "{{g.name}}" class="save btn btn-default">Delete</button> 
    {% endif %} 
{% endwith %}