Допустим, у меня есть список мест, где у каждого места есть список некоторых объектов. Я хочу убедиться, что я получаю эти местоположения, но с отфильтрованным списком объектов.
Вот структура models.py:
class Location(models.Models):
# fields
class LocationObject(models.Models):
location = models.ForeignKey(Location, related_name="objects_list")
# other fields that are used in filtering
Вот как я делаю фильтрацию:
locations = Location.objects.all()
if request_square_from:
locations = locations.filter(objects_list__size__gte=request_square_from)
if request_square_to:
locations = locations.filter(objects_list__size__lte=request_square_to)
# Other filters ...
Проблема в том, что, используя этот метод фильтрации, я получаю в каждом местоположении список объектов, в которых есть по крайней мере один объект, который удовлетворяет условию locations.filter()
,Это не то, что мне действительно нужно. Мне нужно исключить каждый объект (я имею в виду LocationObject
), который не удовлетворяет условию в методе filter()
.
Есть ли идея сделать это?
Обновление . Немного пояснения
Вот как выглядит этот список:
Location #1
- Object 1 (size=40)
- Object 2 (size=45)
- Object 3 (size=30)
Location #2
- Object 4 (size=20)
- Object 5 (size=25)
Я хочу отфильтровать каждый объект местоположения, скажем, по свойству размера. Предположим, это условие: Location.objects.filter(objects_list__size__gte=40)
. Это будет соответствовать местоположениям, которые содержат даже только одну запись списка, которая имеет это свойство. Это не , что мне нужно. Ожидаемый результат должен быть:
Location #1:
- Object 1 (size=40)
- Object 2 (size=45)