Если у вас
production_start
и
production_end
это только год, нет необходимости делать их
DateField
. Если сделать их
PositiveIntegerField
или вообще
PositiveSmallIntegerField
можно будет сделать проще и эффективнее:
def get_mfa(year):
return CarModel.objects.filter(
Q(production_start__lte=year) | Q(production_start__isnull=True),
Q(production_end__gte=year) | Q(production_end__isnull=True)
).values_list('manufacturer', flat=True).distinct()
Допускает ситуации, когда
production_start
,
production_end
или они обе могут отсутствовать.
Если всё же остановитесь на своём варианте, будьте осторожны с
.filter(models_car__in=cm)
. Если список
cm
разрастётся до сотен или тысяч элементов, представьте каким гигантским станет SQL запрос с его использованием и сколько он скушает памяти.