Движок приложения Google db.Model в Python отображает только пользовательские поля - PullRequest
0 голосов
/ 04 мая 2010

Я новичок в Python, поэтому заранее прошу прощения, если этот вопрос уже задавался.

Я создаю приложение в GAE, и мне нужно сгенерировать отчет, содержащий значения для определенного пользователем набора полей.

Например, в моей модели БД CrashReport у меня есть следующие поля:

  • entry_type
  • entry_date
  • instance_id
  • build_id
  • crash_text
  • machine_info

Я представляю пользователя с приведенным выше списком в качестве группы флажков, из которой они выбираются. Какие бы поля ни выбрал пользователь, я затем создаю отчет, показывающий все значения в хранилище данных, но только для выбранных им полей. Например, если из приведенного выше списка пользователь выбирает поля build_id и crash_text, выходные данные могут выглядеть следующим образом:

build_id crash_text
Прокладка с обдувом 0.8.2
0.8.2 спущенная шина
0.8.1 трещина
...

Итак, вопрос в том, как именно я могу получить доступ только к значениям для полей, определенных пользователем?

1 Ответ

2 голосов
/ 04 мая 2010

Учитывая экземпляр модели mi и имя атрибута an, getattr(mi, an) извлечет значение атрибута an для объекта mi. Это повысит AttributeError, если объект mi не имеет атрибута с таким именем; если вы хотите избежать этого, попробуйте, например, getattr(mi, an, None).

Так что если у вас есть список имен атрибутов la,

[getattr(mi, x, None) for x in la]

дает вам список значений различных атрибутов, имена которых находятся в la для данного экземпляра mi.

Если у вас также есть список экземпляров li, и вам нужен список списков (один внешний список на экземпляр, каждый со всеми значениями атрибутов),

[[getattr(mi, x, None) for x in la] for mi in li]

И так далее. Все это общие концепции и операции Python, и они применяются к экземплярам моделей, которые вы извлекли из хранилища данных, не меньше (и не больше), чем к любым другим объектам Python.

...