Я относительно новичок в Python, исходящий из мира PHP. В PHP я бы регулярно извлекал строку, которая соответствовала бы и объекту из базы данных, скажем, Пользователь, и добавляла бы к ней свойства перед передачей объекта пользователя на мою страницу просмотра. Например, у пользователя есть адрес электронной почты, имя и идентификатор. Я получаю 5 пользователей из базы данных и в цикле for, я назначаю динамическое свойство пользователю, скажем, изображение.Добавление динамических свойств к объекту хранилища данных
Это, похоже, не работает в моделях хранилища данных Python/Google App Engine (я думаю, что он должен делать больше с моделью хранилища данных, чем python) в цикле for. Он работает в цикле for (это означает, что я могу ссылаться на user.image в цикле for, но как только цикл for заканчивается, все объекты, похоже, больше не имеют нового изображения атрибутов.
Вот пример кода:
# Model
Class User(ndb.Model):
email = ndb.StringProperty()
name = ndb.StringProperty()
# And then a function that returns a list of users
users = User.get_users()
user_list = []
# For loop
for user in user:
# For example, get image
user.image = Image.get_image(user.key)
user_list.append(user)
# If I print or log this user in the for loop, I see a result
logging.info(user.image) # WORKS!
for ul in user_list:
print ul.image # Results in None/ATTR Error
может кто-нибудь объяснить мне, почему это происходит и как достичь этой цели?
Я искал формы, но я не мог найти что-нибудь.
Это должно определенно работать. Вы уверены, что это точный код? Вы не делаете ничего между первой и второй петлями, которые могут привести к тому, что экземпляры будут повторно загружены из хранилища данных? –
get_users(), вероятно, является запросом, и в этом случае второй цикл будет обновлять пользователей без динамических свойств. –
Даниэль, ты прав! Моя ошибка, ребята, я печатал весь объект и по какой-то причине (возможно, вы можете это объяснить), распечатываются только исходные свойства. Однако, если я делаю прямой вызов динамическому свойству, например, выше (print ul.image), он работает. Сожалею! – kevin