Django的双下划线

20
在Django中,您可以像以下方式进行数据库查询:
Model.objects.filter(name__icontains = 'bob')
问题是:这是如何在“幕后”工作的?双下划线是Django的事情还是Python的事情?这只是一个名为name__icontains的单个变量,还是某种属性访问语法?如果是前者,那么filter方法如何解析变量名以确定您正在搜索在Model表中包含字符串 bob 的名称?

1
作为对@icktoofay的补充,这里提供了关于django双下划线django queryset APIpython关键字迭代教程的文档。 - David Mann
1个回答

20

这是Django的一种实现方式,使用了一些Python语言特性。

在Python中,你可以获取传递给函数或方法的关键字参数的字典:

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

从那里开始,它可以简单地遍历字典键并在__上分割它们,然后以任何希望的方式解释它。在这种情况下,它获取最后一部分,并将icontains解释为不区分大小写的包含。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接