Есть три модели:
class Car(models.Model):
sub_types = models.ManyToManyField(SubType)
class SubType(models.Model):
types = models.ManyToManyField(Type)
class Type(models.Model):
pass
Необходимо фильтровать записи в модели Car используя django-rest-framework через get параметры, вот код который я написал:
class CarFilter(django_filters.FilterSet):
type = django_filters.MethodFilter(action='type_filter')
class Meta:
model = Car
fields = ['sub_type', 'type']
def type_filter(self, queryset, value):
sub_types = list(SubType.objects.filter(types__id=value).values_list('id', flat=True))
cars = queryset.filter(sub_types__in=sub_types)
return cars
class CarsList(generics.ListAPIView):
renderer_classes = (renderers.JSONRenderer,)
model = Car
queryset = Car.objects.all()
serializer_class = CarSerializer
filter_backends = (filters.DjangoFilterBackend, )
filter_class = CarFilter
Интересует вот этот кусок кода:
sub_types = list(SubType.objects.filter(types__id=value).values_list('id', flat=True))
cars = queryset.filter(sub_types__in=sub_types)
Можно ли эту часть оптимизировать?