3 回答
TA贡献1864条经验 获得超6个赞
根据您的更新,您需要一个位置对象列表,而不是位置,因此,不要过滤您的位置,而是过滤位置对象!
objects = LocationObject.objects.all()
if request_square_from:
objects = objects.filter(size__gte=request_square_from)
if request_square_to:
objects = objects.filter(size__lte=request_square_to)
您不限于过滤外键,您可以过滤任何模型实例。
如果在此之后,您想要任何对象的位置,您只需...
objects[0].location
TA贡献1725条经验 获得超7个赞
假设您真的想要那些至少有一个满足这两个条件的对象的位置,您可以这样做:
locations = locations.filter(objects_list__size__gte=request_square_from,
objects_list__size__lte=request_square_to)
但由于您不确定同时拥有这两个参数,因此您不能这样做。但是,您可以使用Q对象来实现它:
from django.db.models import Q
# ...
locations = Location.objects.all()
q = Q()
if request_square_from:
q &= Q(objects_list__size__gte=request_square_from)
if request_square_to:
q &= Q(objects_list__size__lte=request_square_to)
if q:
locations = locations.filter(q)
TA贡献1827条经验 获得超7个赞
如果我没记错的话,你想要的是exclude()
.
filter()
用于过滤掉所有需要的对象。所以你会使用:
locations = locations.filter(objects_list__size__gte=request_square_from)
这将为您提供满足此条件的所有对象。
但是如果你想排除匹配的查询。你需要使用exclude()
locations = locations.exclude(objects_list__size__gte=request_square_from)
这将为您提供不满足条件的对象并返回其余对象。
- 3 回答
- 0 关注
- 91 浏览
添加回答
举报