我有两个表格:文章和出版物。一篇文章可以有多个出版物。
给定发布对象的列表,我想编写一个查询,使我仅获得列表中存在发布对象的那些文章。(仅子集)
例如
给出的出版物为[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