2011-09-17 43 views
9

在Django中,你可以做數據庫查詢類似如下:Django的雙下劃線

Model.objects.filter(name__icontains = 'bob') 

的問題是:這是怎麼工作「的掩護下」?雙重下劃線是Django還是Python?這只是一個名爲name__icontains的變量,還是某種屬性訪問語法?在前一種情況下,filter方法如何解析變量名稱以確定您在Model表中搜索的名稱包含某處字符串bob

回答

12

這是一個Django的東西,用一些Python的東西來實現。

在Python中,你可以得到的傳遞給函數或方法的參數的字典:

>>> def func(*args, **kwargs): 
...  print(kwargs) 
>>> func(a=1, b=2) 
{'a': 1, 'b': 2} 

從那裏,它可以簡單地遍歷字典鍵和他們分裂的__,然後解釋它然而它想要。在這種情況下,它取最後一部分,並將icontains解釋爲不區分大小寫。