Двойное подчеркивание Джанго - PullRequest
11 голосов
/ 17 сентября 2011

В Django вы можете выполнять запросы к базе данных следующим образом:

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

Вопрос: как это работает «под прикрытием»? Двойное подчеркивание - вещь Django или вещь Python? Это просто одна переменная с именем name__icontains, или это какой-то синтаксис доступа к атрибутам? В первом случае, как метод filter анализирует имя переменной, чтобы определить, что вы ищете в таблице Model имя, которое содержит где-то строку bob?

1 Ответ

13 голосов
/ 17 сентября 2011

Это штука Django, реализованная с некоторыми вещами Python.

В Python вы можете получить словарь аргументов ключевых слов, передаваемых в функцию или метод:

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

Оттуда, он может просто перебирать ключи словаря и делить их на __, а затем интерпретировать его так, как ему хочется.В этом случае он принимает последнюю часть и интерпретирует icontains как регистр без учета регистра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...