如何使用 Django 中的成员资格访问多对多的属性
Posted
技术标签:
【中文标题】如何使用 Django 中的成员资格访问多对多的属性【英文标题】:How do i access the properties of a many-to-many with Membership in Django 【发布时间】:2016-07-09 18:10:28 【问题描述】:我怎样才能只设置我的会员资格,而不是全部在 for-loop 中?
模板.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)
我的按钮与某个组中的用户一样多。 我只想显示 1 个按钮,并且我只需要为我在该组中的成员身份精确 ForLoop。我该怎么做?
【问题讨论】:
“我的会员资格”是什么意思?这完全不清楚。你也可以发布你的模型吗? 我的意思是,循环 % for members in g.membership_set.all % 正在遍历某个组中的所有成员。这就是为什么当我想检查我的成员资格(我在这个组中的人)的领导者字段是否为真或假时,但是我现在拥有的这个循环正在遍历这个组中的所有成员(所有成员资格)。好的,我更改并添加模型 【参考方案1】:我认为您不能仅通过使用标准模板代码来做到这一点。您需要通过像这样过滤成员资格来获取您的 Membership
对象:
membership = my_person.membership_set.get(group=my_group)
要在模板中执行此操作,您必须编写适用于my_person
对象的own template filter,并将my_group
对象作为参数。然后过滤器可以应用上述查询并返回成员资格对象。
% 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 %
【讨论】:
以上是关于如何使用 Django 中的成员资格访问多对多的属性的主要内容,如果未能解决你的问题,请参考以下文章