AttributeError в объекте объекта облачного хранилища данных Google

У меня есть организация по имени Автор. Ниже представлен класс ndb:

class Author(ndb.Model):
    name = ndb.StringProperty()
    website = ndb.StringProperty()
    bio = ndb.StringProperty()
    profile_image_url = ndb.StringProperty()
    slug = ndb.ComputedProperty(lambda self: make_slug(self.name))

Я создаю такой объект-автор

author = Author(id=pk, **author_dict)
author.put()

При первом создании авторского объекта ошибки нет.

Я получаю такой объект автора

author = Author.get_by_id(pk)

когда я пытаюсь получить доступ к полю биографии автора, я получаю AttributeError

author.bio = bio_text

Ошибка возникает при доступе к полю в существующем объекте автора. Ошибка появляется не во всех полях.

Консоль показывает все столбцы. Столбец биографии присутствует в консоли хранилища данных для объекта "Автор".

Я удалил все авторские сущности и сделал новые записи. Тем не менее я получаю AttributeError.

У меня есть несколько объектов в хранилище данных, но я получаю эту ошибку только для объекта Author.

Заявление об ошибке:

File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", 
line 2990, in _set_attributes
prop = getattr(cls, name)  # Raises AttributeError for unknown properties.
AttributeError: type object 'Author' has no attribute 'bio'

ЗАКРЫТО:

У меня был класс под названием Author в другом модуле. Этот класс каким-то образом использовался NDB для создания сущности автора и вызывал такое поведение.


person zaphod100.10    schedule 29.04.2016    source источник
comment
Не могли бы вы предоставить минимальный воспроизводимый пример. Я не могу воспроизвести эту проблему с помощью предоставленного вами примера кода.   -  person snakecharmerb    schedule 29.04.2016
comment
Привет, я добавил дополнительную информацию. Я могу добавить окружающий код, но он не связан с ошибкой.   -  person zaphod100.10    schedule 29.04.2016
comment
Вы можете получить эту ошибку, только если автор является классом, а не экземпляром, и является классом, не имеющим атрибута bio. Кажется, что вы перезаписываете author где-то в своем коде.   -  person snakecharmerb    schedule 29.04.2016
comment
Вы можете попробовать распечатать или записать type(author) и author.__name__ непосредственно перед строкой, в которой произошел сбой, чтобы увидеть, что author на самом деле.   -  person snakecharmerb    schedule 29.04.2016
comment
Я попробовал ваше предложение, и независимо от того, какие поля у меня есть в классе Author, type (Author) печатает Author ‹author_id = StringProperty ('author_id'), name = StringProperty ('name'), profile_image_url = StringProperty ('profile_image_url') ›   -  person zaphod100.10    schedule 29.04.2016
comment
и автор .__ name__ выдает ошибку атрибута   -  person zaphod100.10    schedule 29.04.2016
comment
Давайте продолжим это обсуждение в чате.   -  person snakecharmerb    schedule 29.04.2016


Ответы (1)


У меня был класс под названием Author в другом модуле. Этот класс использовался как структурированное свойство в другом классе сущности.

Каким-то образом этот класс использовался NDB для создания объекта Author. Я переименовал этот класс, и ошибка исчезла.

Теперь я использую разные имена классов для всех сущностей ndb и структурированных свойств.

person zaphod100.10    schedule 29.04.2016