Поиск по многим полям (ManyToManyField), который Django, похоже, пока не поддерживает
Я хочу сделать кое-что, что, похоже, Django пока официально не поддерживает.
Вот и models.py
class Report(models.Model):
# using default `AutoField`, `id` / `pk`
pass
class BulkOfReports(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid7,
editable=False,
verbose_name="ID",
)
reports = models.ManyToManyField(
Report,
verbose_name=_("laporan-laporan"),
related_name="bulk_of_reports",
)
И, например, если эти BulkOfReports
можно представить так:
BulkOfReports = [Reports_ids]
Тогда с такими данными:
A = [1, 2, 3]
B = [1, 2]
C = [1]
D = [2]
E = [3]
Как я могу получить опцию A только с помощью API Django QuerySet
?
Я пробовал следующее:
self.reports.filter(id__in=[1, 2, 3])
Но у меня есть все те QuerySet
, о которых говорилось выше:
A, B, C, D, E
Вы можете фильтровать с помощью:
from django.db.models import Count, Q
BulkOfReports.objects.alias(
nrep=Count('reports'),
nfilter=Count('reports', filter=Q(reports__id__in=my_report_ids)),
).filter(nrep=len(my_report_ids), nfilter=len(my_report_ids))
Надеюсь, я правильно понял ваш вопрос...
попробуйте это:
bulk_reports_ids = BulkOfReports.objects.filter(
reports__id__in=[1, 2, 3]
).values_list('id', flat=True)
.values_list()
метод, описанный в документации по джанго