Почему django должен использовать двойное подчеркивание при выполнении запросов фильтра? - PullRequest
5 голосов
/ 30 марта 2011

Итак, в джанго мы пишем

Entry.objects.filter(blog__id=3)

Что выглядит некрасиво, потому что иногда слишком много подчеркиваний

Entry.objects.filter (blog_something_ подчеркивают * +1007 * _too_ много _id = 3)

почему django не может использовать синтаксис, такой как

[entry.objects if blog.id=3 ]

Я не эксперт в этом, но почему стоит подчеркивать дважды? Может ли быть более элегантный стиль в грамматике python, чтобы написать это?

1 Ответ

9 голосов
/ 30 марта 2011

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 и неуклюжим **, но у нас все еще остались скобки словаря, поэтому, вероятно, вместо этого они использовали двойные подчеркивания.

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