Django的双下划线
在Django中,你可以像下面这样进行数据库查询:
Model.objects.filter(name__icontains = 'bob')
问题是:这背后是怎么运作的?这个双下划线是Django特有的,还是Python的特性?这是一个叫做 name__icontains
的单一变量,还是某种属性访问的语法?如果是前者,那么 filter
方法是怎么解析这个变量名的,从而知道你是在搜索 Model
表中包含字符串 bob
的名字呢?
1 个回答
20
这是一个关于Django的内容,里面用到了一些Python的知识。
在Python中,你可以获取传递给函数或方法的关键字参数,并把它们放在一个字典里:
>>> def func(*args, **kwargs):
... print(kwargs)
>>> func(a=1, b=2)
{'a': 1, 'b': 2}
接下来,它可以简单地遍历这个字典的键,并用__
进行分割,然后根据需要进行解释。在这个例子中,它会取最后一部分,把icontains
理解为不区分大小写的包含。