0

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

When i create group, my role is "Team Leader", when i add someone to the group, he's role is "Noob". I want to display all members of the group and their roles. The problem is: my actual output is:

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

What i want to get:

damian - Team Leader
test - Noob

Anyone knwo how to solve this? Thanks for any help!

Damian
  • 115
  • 4
  • 13

1 Answers1

0

It is a little hard to understand your code because of the cryptic variable names such as z.

The issue appears to be that you are only printing the role if the z.person.name == member.name.

If you remove that conditional from the loop then it will display all the roles in the group rather than just one. But to do that you need to look up the role through the member object instead of the z object

xthestreams
  • 169
  • 5
  • But how? I can't add properties "role" to the member in the model. Or maybe i didn't understand you. – Damian Mar 22 '16 at 02:31
  • Sorry, I got confused with the member variable name and the membership model. Look here: http://stackoverflow.com/questions/3368442/how-do-i-access-the-properties-of-a-many-to-many-through-table-from-a-django-t it looks very similar to your question and will probably be a better answer than what I can provide. – xthestreams Mar 22 '16 at 02:42