3 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
根據(jù)您的更新,您需要一個(gè)位置對(duì)象列表,而不是位置,因此,不要過(guò)濾您的位置,而是過(guò)濾位置對(duì)象!
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)
您不限于過(guò)濾外鍵,您可以過(guò)濾任何模型實(shí)例。
如果在此之后,您想要任何對(duì)象的位置,您只需...
objects[0].location

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
假設(shè)您真的想要那些至少有一個(gè)滿(mǎn)足這兩個(gè)條件的對(duì)象的位置,您可以這樣做:
locations = locations.filter(objects_list__size__gte=request_square_from,
objects_list__size__lte=request_square_to)
但由于您不確定同時(shí)擁有這兩個(gè)參數(shù),因此您不能這樣做。但是,您可以使用Q對(duì)象來(lái)實(shí)現(xiàn)它:
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貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果我沒(méi)記錯(cuò)的話,你想要的是exclude()
.
filter()
用于過(guò)濾掉所有需要的對(duì)象。所以你會(huì)使用:
locations = locations.filter(objects_list__size__gte=request_square_from)
這將為您提供滿(mǎn)足此條件的所有對(duì)象。
但是如果你想排除匹配的查詢(xún)。你需要使用exclude()
locations = locations.exclude(objects_list__size__gte=request_square_from)
這將為您提供不滿(mǎn)足條件的對(duì)象并返回其余對(duì)象。
- 3 回答
- 0 關(guān)注
- 116 瀏覽
添加回答
舉報(bào)