我有一组类似于下面的模型,其中一个人可以是许多俱乐部的成员,但具有不同的会员类型。在这种情况下,我认为Membership
是Club
class Person(models.Model):
name = models.TextField()
class Club(models.Model):
members = models.ManyToManyField(
Person,
related_name="clubs"
through='Membership'
)
class Membership(models.Model):
person = models.ForeignKey(Person)
club = models.ForeignKey(Club)
member_type = models.TextField()
我知道我可以通过以下方式访问俱乐部的会员资料:
instance_of_club.membership_set.all()
我可以通过以下方式获得所有人的列表:
instance_of_club.membership_set
但是,我正在尝试为这种情况编写一个序列化程序,并且无法从django Meta
类中正确查找“成员资格”详细信息。
Club._meta.many_to_many
提供members
字段:
<django.db.models.fields.related.ManyToManyField: members>
但members
上的任何内容都没有说明如何获取_set
访问者 - 我需要能够以编程方式获取这些内容。我想要的是能够获得所有ManyToMany through
关系的列表,然后获取这些对象,而不仅仅是外来对象。
上下文:
members.related.through
提供Membership
类,但不提供实例集合members.related.related_name
没有任何内容Club._meta.get_all_field_names()
在列表中提供membership
,但不在membership_set
如何获取ManyToMany字段上的through
关系对象列表?
答案 0 :(得分:-1)
您的Club
模型应该如下所示:
class Club(models.Model):
members = models.ManyToManyField(
Person, related_name='clubs', through='Membership'
)
我知道我可以通过以下方式访问俱乐部的会员资料:
instance_of_club.membership_set.all()
我可以通过以下方式获得所有人的列表:
instance_of_club.membership_set
这不是真的! instance_of_club.membership_set
是Membership
模型的俱乐部相关经理。 instance_of_club.membership_set.all()
是此相关管理员的QuerySet
(也是Membership
模型实例):
club_instance.members.all() # all related Person instances of a club
club_instance.membership_set.all() # all related Memberships of a club
person_instance.clubs.all() # all related Club instances of a person
person_instance.membership_set.all() # all related Memberships of a person