У меня есть 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
объектов:
- 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 разных наборов файлов? Как фильтровать файлы, которые находятся в других наборах файлов, если у меня несколько наборов файлов?