我有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
对象:文件1
文件2
文件3
我有2个
Fileset
对象:Fileset1(与File1相关)
Fileset2(与File1,File2和File3相关)
当我尝试查询时:
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个不同的文件集时,如何进行这项工作?当我有多个文件集时,应如何过滤其他文件集中的文件?
最佳答案
我通过使用annotate
和Count
这样解决了它:
from django.db.models import Count
File.objects
.annotate(fileset_count=Count('fileset_files__uuid'))
.filter(fileset_count=1)
关于python - Django过滤器manytomanyfield排除与另一个模型相关的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56058505/