2014-12-22 2 views
2

Службы Google AppEngine NDB являются странными животными. Скажем, у меня есть класс (и элемент ndb) автомобиля
с цветовыми и весовыми свойствами. я могу сделатьВызов запроса GAE NDB с динамическим именем свойства

Car.query(Car.color == "blue") 

Я никогда не видел никакой документации Python 2 на такого рода «вызов функции». Сколько аргументов передается? Логически это будет один , который является булевым, но, по-видимому, «запрос» может найти код этого аргумента и получить Car.color, == и «blue». Можно ли разработчикам определить такие функции, или это какой-то компилятор?

Моя реальная проблема заключается в том, что у меня есть пользовательский диалог ввода, который имеет поля для класса («Car» в данном случае) свойство («цвет» в данном случае) и значение, («синий» в этом случае). Как я могу построить и вызвать запрос, который берет эти входы?

ответ

4

Это делается с помощью python magic methods, в вашем примере используется __eq__.

Чтобы построить запрос, который вы можете использовать что-то вроде этого:

Car.query(getattr(Car, 'color') == 'red') 

Будьте уверены, чтобы проверить, если свойство существует по телефону hasattr(Car, 'color')

+0

Спасибо Димитрия, ваш вызов запроса работает. – user1343035

+0

В документе магических методов есть много документов для контринтуитивного дизайна python, esp w.r.t. инфиксные операторы. Но это не затрагивает проблему механизма запроса CALLING, в результате чего у нас есть тело метода запроса, очевидно получающее информацию из исходного кода вызова, который * не должен быть *. – user1343035

+0

Этот 'Car.color ==" blue "' возвращает определенное значение, в этом случае - свой объект фильтра с определенными параметрами - его легко. –

Смежные вопросы