Аннотируйте набор запросов с отфильтрованными связанными наборами запросов, которые также должны быть аннотированы
class A(models.Model):
name = models.CharField()
class B(models.Model):
name = models.CharField()
class C(models.Model):
name = models.CharField()
class D(models.Model):
a = models.ForeignKey(A, related_name='set_of_a')
b = models.ForeignKey(B, related_name='set_of_d')
set_of_c = models.ManyToManyField(C, related_name='set_of_d')
Я хочу получить кверисет, который должен заменить следующую функцию (в некоторых местах может быть псевдокодом):
def get_queryset(name, list_of_d):
result = list(A.objects.filter(name__icontains=name))
for a in result:
a.map_b_to_list_of_d = {} # annotation
for b in B.objects.filter(set_of_d__set_of_c__intersects_with=set_of_c):
a.map_b_to_list_of_d.setdefault(c, []) += list(b.set_of_d.filter(a__name__icontains=name, set_of_c__intersects_with=set_of_c))
return result