ManytoMany关系Django中的子集查询

时间:2020-09-02 07:01:51

标签: 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.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

0 个答案:

没有答案