2016-03-22 11 views
1

Forループのすべてではなく、メンバーのメンバーのみを設定するにはどうすればよいですか?Djangoのメンバーシップを使用して多対多のプロパティにアクセスするには

template.html:

  {% for g in gr %} 

      <div class="jumbotron"> 
      <div class="jumbo2"> 
       <form method="POST" class="post-form"> {% csrf_token %} 
       <p id="name"><b>Groups name:</b> {{g.name}}</p><br> 

       {% for membership in g.membership_set.all %} 

         <p><b>Member:</b> {{ membership.person }} - {{ membership.role }}</p>        

       {% endfor %} 






       <br> 
       <span class="desc2">Groups description:</span> 
       <p id="desc">{{g.description}}</p><br> 



       {% for membership in g.membership_set.all %} 

         {% if membership.leader == False %} 
         <button style="float: right" type="submit" name = "leave" value = "{{g.name}}" class="save btn btn-default">Leave</button> 
         {% elif membership.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></p> 



       </div> 
       </div> 

      {% endfor %} 

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) 

私のボタンはできるだけ多くdispleyedされています。 ボタンを1つだけ表示したいのですが、私はこのグループのメンバーシップのためにForLoopを正確に行う必要があります。これどうやってするの?

+0

「マイメンバーシップ」とはどういう意味ですか?それは完全に不明です。あなたのモデルを投稿することもできますか? –

+0

つまり、ループ{g%membership_set.all%のメンバーシップ}は、あるグループのすべてのメンバーシップを通過しています。だから私がチェックしたいのは、私のメンバーシップ(このグループの私の人)が真または偽のリーダーフィールドを持っているのですが、私が今持っているこのループは、このグループのすべてのメンバー(すべてのメンバーシップ)を通過しています。 私はモデルを変更して追加します – Damian

答えて

0

標準のテンプレートコードを使用してこれを行うことはできません。あなたはそのようなメンバーシップをフィルタリングすることにより、あなたのMembershipオブジェクトを取得する必要があります:

membership = my_person.membership_set.get(group=my_group) 

テンプレートでこれを行うには、あなたがmy_personオブジェクト上で動作し、パラメータとしてmy_groupオブジェクトを取り、あなたのown template filterを記述する必要があります。フィルタは、上記のクエリを適用し、メンバシップオブジェクトを返すことができます。

{% with membership=my_person|get_group_membership:g %} 
    {% if membership.leader == False %} 
     <button style="float: right" type="submit" name = "leave" value = "{{g.name}}" class="save btn btn-default">Leave</button> 
    {% elif membership.leader == True %} 
     <button style="float: right" type="submit" name = "delete" value = "{{g.name}}" class="save btn btn-default">Delete</button> 
    {% endif %} 
{% endwith %} 
関連する問題