Django работает на Python, который устанавливает некоторые основные ограничения, когда дело доходит до синтаксиса, что делает невозможным следующий предлагаемый синтаксис (Python не допускает большого переопределения базового синтаксиса):
[entry.objects if blog.id=3 ]
Кроме того, «blog» и «id» не являются объектами, они ссылаются на имена в базе данных, поэтому обращение к ним как blog.id
также проблематично. Если, конечно, он вводится как строка, что на самом деле и делается, поскольку аргументы ключевых слов передаются как объекты словаря в Python. Конечно, это можно сделать другими способами, вот пример того, как использовать точки в качестве разделителей:
def dotstyle(dict):
retdict = {}
for key, value in dict.items():
retdict[key.replace(".", "__")] = value
return retdict
Entry.objects.filter(**dotstyle({"blog.id": 3})
Включив это в функцию фильтра в Django, мы могли бы покончить с функцией dotstyle и неуклюжим **, но у нас все еще остались скобки словаря, поэтому, вероятно, вместо этого они использовали двойные подчеркивания.