在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的文档。