Создание набора django-queryset со всеми объектами, но не со всеми связанными по условию полями "многие ко многим
class Post(models.Model):
    text = models.TextField()
class Project(models.Model):
    name = models.CharField(max_length=60)
    description = models.CharField(max_length=500)
class Tag(models.Model):
    name = models.CharField(max_length=60)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
class TaggedPost(models.Model):
    org_post = models.ForeignKey(Post, on_delete=models.CASCADE)
    tags = models.ManyToManyField(Tag)
Предположим, что я определил вышеуказанные модели. Существует несколько проектов, которые все имеют несколько тегов.
Eg:
- Project1 -> Tag1, Tag2
 - Project2 -> Tag3
 
Не каждый пост имеет объект TaggedPost. Например,
- Post1 -> нет тегов
 - Post2 ->TaggedPost -> Tag1
 - Пост3 ->TaggedPost -> Tag2
 - Post4 ->TaggedPost -> Tag2, Tag3 (Здесь представлены теги нескольких проектов)
 
Теперь я хочу сделать набор запросов, который содержит все сообщения (также сообщения без тегов), но только теги определенного проекта.
qs.include_tags_of_project(Project1) приводит к:
- Post1 -> нет тегов
 - Post2 -> Tag1
 - Post3 -> Tag2
 - Post4 -> Tag2
 
qs.include_tags_of_project(Project2) приводит к:
- Пост1 -> без тегов
 - Post2 -> без тегов
 - Post3 -> без тегов
 - Post4 -> тег3
 
Есть предложения, как с этим справиться? Thx
Во-первых, получить все посты по project.id (или project.name или description). Во втором, сделайте prefetch_related, чтобы получить все теги для проекта. Prefetch поможет вам получить только теги для конкретного проекта.
Post.objects.filter(taggedposts__tags__project_id=project1.pk).prefetch_related(Prefetch('tags', queryset= Tag.objects.filter(project_id=project1.pk)))