Фильтрация модели с иностранным ключом с помощью списка других моделей?
Я хочу отфильтровать сборщики 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
))