开发者

Django's Double Underscore

In Django, you can make database queries like the following:

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

The question is: how is this working 'under the cover'? Is the double underscore a Django thing or a Python thing? Is this just a single variable named name__icontains, or is it some sort of attribute-access syntax? In the former case, how does the filter method parse the variable name to determine that you are searching the Model table for a name that contains somewhere the string bob?开发者_开发知识库


It's a Django thing, implemented with some Python things.

In Python, you can get a dictionary of the keyword arguments passed to a function or method:

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

From there, it can simply iterate over the dictionary keys and split them on __, and then interpret it however it wants. In this case, it takes the last part and interprets icontains as case-insensitive contains.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜