Двойное подчеркивание Django
в Django, вы можете сделать запросы к базе данных следующим образом:
Model.objects.filter(name__icontains = 'bob')
вопрос в том, как это работает "под прикрытием"? Является ли двойное подчеркивание вещью Django или вещью Python? Это всего лишь одна переменная name__icontains
, или это какой-то синтаксис доступа к атрибутам? В первом случае, как filter
метод Parse имя переменной, чтобы определить, что вы ищете Model
"таблица" на имя содержит куда-то строка bob
?
1 ответов
это вещь Django, реализованная с некоторыми вещами Python.
в Python вы можете получить словарь аргументов ключевого слова, переданных функции или методу:
>>> def func(*args, **kwargs):
... print(kwargs)
>>> func(a=1, b=2)
{'a': 1, 'b': 2}
оттуда он может просто перебирать ключи словаря и разбивать их на __
, а затем интерпретируйте его так, как он хочет. В этом случае он принимает последнюю часть и интерпретирует icontains
как содержит без учета регистра.