Поиск по многим полям (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() метод, описанный в документации по джанго

Вернуться на верх