Я хочу отобразить 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)
Почему вы все еще настаиваете на использовании нечитаемых двухсимвольных имен переменных? Если переменная представляет группы, назовите ее 'groups', а не' gr'. Мы не живем в 80-х годах, компьютеры имеют достаточную память для имен переменных полного слова. –
Хорошо, мне очень жаль, но это мое первое приложение, поэтому я пытаюсь сделать это самостоятельно. Но я исправлю себя в будущем. В любом случае, знаете ли вы, как решить эту проблему? – Damian
Честно говоря, я даже не понял, в чем проблема. Что вы хотите увидеть и что вы сейчас видите? – Selcuk