Python 多个关系Django中的子集查询

Python 多个关系Django中的子集查询,python,django,many-to-many,django-orm,Python,Django,Many To Many,Django Orm,我有两个表格:文章和出版物。一篇文章可以有多个出版物 给定一个发布对象列表,我想编写一个查询,只提供列表中存在发布对象的文章。(仅子集) 例如 ABC文章有出版物P1、P2 BCD有P2,P3 DEF有P3、P4 给定的出版物为[P1、P2、P3] 所以查询输出应该是-ABC,BCD DEF将被排除在外,因为其具有列表中不存在的P4 在M2M关系中,使用筛选和排除不能正常工作。 所以我用for循环来解决这个问题,它看起来效率不高,我想要更具Pythonic和ORM效率的解决方案 models

我有两个表格:文章出版物。一篇文章可以有多个出版物

给定一个发布对象列表,我想编写一个查询,只提供列表中存在发布对象的文章。(仅子集)

例如

  • ABC文章有出版物P1、P2
  • BCD有P2,P3
  • DEF有P3、P4
给定的出版物为[P1、P2、P3]

所以查询输出应该是-ABC,BCD

DEF将被排除在外,因为其具有列表中不存在的P4

在M2M关系中,使用筛选和排除不能正常工作。 所以我用for循环来解决这个问题,它看起来效率不高,我想要更具Pythonic和ORM效率的解决方案

models.py

from django.db import models

class Publication(models.Model):
    title = models.CharField(max_length=30)

    class Meta:
        ordering = ['title']

    def __str__(self):
        return self.title

class Article(models.Model):
    headline = models.CharField(max_length=100)
    publications = models.ManyToManyField(Publication)

    class Meta:
        ordering = ['headline']

    def __str__(self):
        return self.headline
Views.py

article = Article.objects.get(pk=pk)
publications_in_article = article.publications.all()

for publication in publications_in_article :
  if publication not in cleaned_data.get('publications'):
    exclude_publications.append({'id': publication.id, 'name': publication.title})
    break

return exclude_publications