django 阅读联想的一面

yhuiod9q  于 2023-05-01  发布在  Go
关注(0)|答案(1)|浏览(73)

假设我们的Django应用程序中有两个模型:

class Member(models.Model):
    name = models.CharField()

class Project(models.Model):
    name = models.CharField()

通常,对于多对多字段,我会创建一个中间表,然后查询:

class ProjectMember(models.Model):
    project = models.ForeignKey(Project)
    member = models.ForeignKey(Member)

是否有一种方法可以检索查询集,以便只列出成员的项目?
我尝试了ProjectMember.objects.filter(member=member).only('project'),但仍然得到ProjectMember对象列表,其中只有project字段被填充。
我希望检索Project对象的列表。

rsaldnfx

rsaldnfx1#

你可以通过查询两个连续的下划线(__)来查看关系,所以:

Project.objects.filter(projectmember__member=member)

但是,您的ProjectMember模型充当MemberProject之间多对多关系的连接表。您可以在Project模型上使用以下命令生成**ManyToManyField**[Django-doc]:

class Project(models.Model):
    # …
    members = models.ManyToManyField(
        Member,
        related_name='projects',
        through='ProjectMember'
    )

然后,您可以使用以下过滤:

Project.objects.filter(members=member)

或者甚至:

member.projects.all()

相关问题