在Django中,你可以做數據庫查詢類似如下:Django的雙下劃線
Model.objects.filter(name__icontains = 'bob')
的問題是:這是怎麼工作「的掩護下」?雙重下劃線是Django還是Python?這只是一個名爲name__icontains
的變量,還是某種屬性訪問語法?在前一種情況下,filter
方法如何解析變量名稱以確定您在Model
表中搜索的名稱包含某處字符串bob
?
在Django中,你可以做數據庫查詢類似如下:Django的雙下劃線
Model.objects.filter(name__icontains = 'bob')
的問題是:這是怎麼工作「的掩護下」?雙重下劃線是Django還是Python?這只是一個名爲name__icontains
的變量,還是某種屬性訪問語法?在前一種情況下,filter
方法如何解析變量名稱以確定您在Model
表中搜索的名稱包含某處字符串bob
?
這是一個Django的東西,用一些Python的東西來實現。
在Python中,你可以得到的傳遞給函數或方法的參數的字典:
>>> def func(*args, **kwargs):
... print(kwargs)
>>> func(a=1, b=2)
{'a': 1, 'b': 2}
從那裏,它可以簡單地遍歷字典鍵和他們分裂的__
,然後解釋它然而它想要。在這種情況下,它取最後一部分,並將icontains
解釋爲不區分大小寫。
作爲@icktoofay的補充,這裏是關於django double underscore,django queryset API和python keyword iteration tutorial的文檔。