2016-03-20 15 views
0

Ich möchte 1 Schaltfläche in der For-Schleife anzeigen, aber ich bekomme so viele Schaltflächen wie viele ich Gruppen erstellt habe. Also ... als ich 3 Gruppen erstellt habe, in denen ich eines der Mitglieder bin, habe ich 3 Buttons unter jeder Gruppe, die ich habe. Das Problem ist mit dieser ersten Schleife in meinem Code, aber ich weiß nicht, wie ich das lösen soll.Schlechte For-Schleife in Django mit Gruppen-Modell, ManyToMany-Feld

Problem ist in Schleife:

{% for z in mem %} 

Wenn ich keine Mitgliedschaften erstellen, es ist wie:

m = Membership.objects.create(person="damian", group="name_group", leader=True)/or False 

Vielen Dank für jede Hilfe!

groups.html:

{% for g in gr %} 
      <div class="jumbotron"> 
      <div class="jumbo2"> 
       <form method="POST" class="post-form"> {% csrf_token %} 
       <p id="name"><b>Group's name:</b> {{g.name}}</p><br> 

       {% for member in g.members.all %} 

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

       {% endfor %} 



       <br> 
       <span class="desc2">Group's description:</span> 
       <p id="desc">{{g.description}}</p><br> 
       {% for z in mem %} 
        {% if z.leader == False %} 
        <button style="float: right" type="submit" name = "leave" value = "{{g.name}}" class="save btn btn-default">Leave</button> 
        {% elif z.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> 
       {% if messages %} 
       {% for message in messages %} 
        <p>{{ message }}</p> 
       {% endfor %} 
       {% endif %} 
       </p> 

      </div> 
      </div> 



      {% endfor %} 

views.py:

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) 
+0

Warum bestehen Sie immer noch darauf, unlesbare zweistellige Variablennamen zu verwenden? Wenn eine Variable Gruppen repräsentiert, nenne sie 'groups', nicht' gr'. Wir leben nicht in den 80ern, Computer haben genügend Speicher für Vollwort-Variablennamen. –

+0

Ok, tut mir leid, aber es ist meine erste App, also versuche ich es selbst zu machen. Aber ich werde mich für die Zukunft korrigieren. Wie auch immer, weißt du, wie du dieses Problem lösen kannst? – Damian

+0

Ehrlich gesagt habe ich nicht einmal verstanden, was das Problem ist. Was möchtest du sehen und was siehst du gerade? – Selcuk

Antwort

0

Ok, ich ersetzen meine Gruppen und verwendet nur die Mitgliedschaft Objekte. Hier ist mein Arbeitscode:

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

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

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

       {% endfor %} 


       <br> 
       <span class="desc2">Group's description:</span> 
       <p id="desc">{{z.group.description}}</p><br> 


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

       </form> 
       <br><br> 
       <p> 
       </p> 

      </div> 
      </div> 

      {% endfor %} 
Verwandte Themen