2016-03-20 6 views
0

Я хочу отобразить 1 кнопку в for-loop, но я получаю столько кнопок, сколько у меня создано групп. Поэтому ... когда я создал 3 группы, в которых я один из членов, у меня есть 3 кнопки под каждой группой, которую у меня есть. Проблема заключается в этом первом цикле в моем коде, но я не знаю, как это решить.Bad for-loop в django с моделью групп, поле ManyToMany

Проблема в цикле:

{% for z in mem %} 

Когда я создавать членством это как:

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

Спасибо за любую помощь!

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

Почему вы все еще настаиваете на использовании нечитаемых двухсимвольных имен переменных? Если переменная представляет группы, назовите ее 'groups', а не' gr'. Мы не живем в 80-х годах, компьютеры имеют достаточную память для имен переменных полного слова. –

+0

Хорошо, мне очень жаль, но это мое первое приложение, поэтому я пытаюсь сделать это самостоятельно. Но я исправлю себя в будущем. В любом случае, знаете ли вы, как решить эту проблему? – Damian

+0

Честно говоря, я даже не понял, в чем проблема. Что вы хотите увидеть и что вы сейчас видите? – Selcuk

ответ

0

Хорошо, я заменить свои группы и используются только членство объектов. Вот мой рабочий код:

  {% 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 %}