第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Django - 過(guò)濾相關(guān)對(duì)象

Django - 過(guò)濾相關(guān)對(duì)象

Go
守著一只汪 2022-06-14 09:41:23
假設(shè)我有一個(gè)位置列表,其中每個(gè)位置都有一些對(duì)象的列表。我想確保我得到這些位置,但有一個(gè)過(guò)濾的對(duì)象列表。這是models.py的結(jié)構(gòu):class Location(models.Models):    # fieldsclass LocationObject(models.Models):    location = models.ForeignKey(Location, related_name="objects_list")    # other fields that are used in filtering這是我進(jìn)行過(guò)濾的方法: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 ...問(wèn)題是,通過(guò)使用這種過(guò)濾方法,我在每個(gè)位置都獲得了一個(gè)對(duì)象列表,其中至少有一個(gè)對(duì)象滿(mǎn)足locations.filter(). 這不是我真正需要的。我需要排除每個(gè)LocationObject不滿(mǎn)足filter()方法中條件的對(duì)象(我的意思是 )。有什么想法嗎?更新。一點(diǎn)澄清此列表的外觀如下:Location #1   - Object 1 (size=40)   - Object 2 (size=45)   - Object 3 (size=30)Location #2   - Object 4 (size=20)   - Object 5 (size=25)我想通過(guò) size 屬性過(guò)濾每個(gè)位置對(duì)象。假設(shè)這個(gè)條件:Location.objects.filter(objects_list__size__gte=40)。這將匹配僅包含具有此屬性的單個(gè)列表?xiàng)l目的位置。這不是我需要的。預(yù)期結(jié)果應(yīng)該是:Location #1:   - Object 1 (size=40)   - Object 2 (size=45)
查看完整描述

3 回答

?
慕尼黑的夜晚無(wú)繁華

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


查看完整回答
反對(duì) 回復(fù) 2022-06-14
?
qq_遁去的一_1

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)


查看完整回答
反對(duì) 回復(fù) 2022-06-14
?
慕仙森

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ì)象。


查看完整回答
反對(duì) 回復(fù) 2022-06-14
  • 3 回答
  • 0 關(guān)注
  • 116 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)