Фильтрация модели с иностранным ключом с помощью списка других моделей?

Я хочу отфильтровать сборщики org по их внешнему ключу org_data по списку org_data с типом Github.

OrgCollector.objects.filter(
org_data=OrgData.objects.filter(
            data_type=DataTypeEnum.GITHUB
        ))

В настоящее время у меня есть это, но оно не работает. Что мне сделать вместо этого?

Прохождение по списку с помощью цикла for работает, но я ожидаю, что есть лучший способ.

Я также попробовал org_data__in, но это тоже не сработало.

Если я правильно понял ваш вопрос и вы добавили правильный код, вот что вы можете сделать:

# Get ids of org_data
org_data_ids = OrgData.objects.filter(
            data_type=DataTypeEnum.GITHUB
        ).values_list('id', flat=True)

result = OrgCollector.objects.filter(org_data_id__in=org_data_ids)

или

# If the above one is creating duplicate results
result = OrgCollector.objects.filter(org_data_id__in=org_data_ids).distinct()

Вы можете фильтровать с помощью:

OrgCollector.objects.filter(
    org_data__data_type=DataTypeEnum.GITHUB
)

это будет искать "через" отношение и таким образом извлекать OrgCollector, для которых data_type из org_data является DataTypeEnum.GITHUB.

В типе перечисления он сопоставляется не с string, а с типом перечисления.

Попробуйте этот запрос

OrgCollector.objects.filter(
org_data=OrgData.objects.filter(
            data_type=DataTypeEnum.GITHUB.value
        ))
Вернуться на верх