我有2个模型,File
和Fileset
:
class File(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
class Fileset(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
files = models.ManyToManyField(File, related_name='fileset_files')
我要过滤与其他File
不相关的Fileset
个对象
考虑我有3个File
对象:
我有2个Fileset
对象:
当我尝试查询时:
File.objects
.filter(fileset_files__fileset_name='Fileset2') # all files from Fileset2
.exclude(fileset_files=Fileset.objects.get(fileset_name='Fileset1')) # exclude the files that are in Fileset1
这会像我想要的那样返回File2和File3。
当我拥有20个不同的文件集时,如何使它起作用?当我有多个文件集时,应该如何过滤其他文件集中的文件?
答案 0 :(得分:1)
我通过使用annotate
和Count
这样解决了这个问题:
from django.db.models import Count
File.objects
.annotate(fileset_count=Count('fileset_files__uuid'))
.filter(fileset_count=1)