2016-03-22 10 views
0

views.py;DjangoでQuerysetsを使用するForLoopsの間違った反復

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

私はグループを作成するとき、私はグループにユーザーを追加するとき、私の役割は、 "チームリーダー" であります彼は役割が "Noob"です。私はグループのすべてのメンバーとその役割を表示したい。問題がある:私の実際の出力は次のようになります。

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

何私が取得したい:誰もがこの問題を解決する方法をknwo

damian - Team Leader 
test - Noob 

? 助けてくれてありがとう!

答えて

0

zなどのわかりにくい変数名のため、コードを理解するのは少し難しいです。

この問題は、z.person.name == member.nameの場合にのみロールを印刷しているように見えます。

ループから条件を削除すると、グループ内のすべてのロールが1つではなく表示されます。しかし、それを行うにはzオブジェクトの代わりにmemberオブジェクトを使用して役割を調べる必要があります

+0

どのようにですか?私はモデルのメンバーにプロパティ "ロール"を追加できません。それとも、私はあなたを理解していないかもしれません。 – Damian

+0

申し訳ありませんが、私はメンバ変数名とメンバシップモデルと混同しています。ここを見てください:http://stackoverflow.com/questions/3368442/how-do-i-access-the-properties-of-a-many-to-many-through-table-from-a-django-tそれは見えますあなたの質問に非常によく似ていて、私が提供できるものよりも良い答えになるでしょう。 – xthestreams

+0

よろしくお願いします。 – Damian

関連する問題