Обновление модели на сервере хранилища данных Gae

У меня есть профиль класса:

class profile(db.Model):
  user = db.stringProperty()
  # Other properties ...
  access = db.ListProperty(db.keys)

class apps(db.Model):
  name = db.StringProperty()

Класс профиля был там некоторое время, но мы недавно добавили поле доступа, в котором будут храниться ключи приложений. Теперь мы добавляем права доступа к профилю в приложение, поле доступа не обновляется в модели.

Это прекрасно работает на локальном хосте, но когда я обновляю это на сервере, я получаю эту ошибку: "Объект" NoneType "не имеет атрибута" доступ "". Кто-нибудь сталкивался с такой же ситуацией?

Обновление: выяснилось, что один из объектов из класса профиля возвращается как None. Вот код, который получает объект профиля на локальном хосте, но не на сервере

 liuser = users.User(request.POST['user']) 
 #request.POST['user'] gets user Gmail ID, which is being converted to user object
 profiles=Profile.all().filter(" user =", liuser).get()
 userprofile=profiles

 #tried below code which returns "'NoneType' object has no attribute 'access'" on server, the same gets a profile object on localhost
 if not hasattr(userprofile, "access"): 
    userprofile.access=[]

@ Роберт надеюсь, что с форматированием сейчас все в порядке.

Спасибо, Саи Кришна

2 ответа

Решение

Мы смогли это исправить. Проблема была в объекте users.User, который не добавляет @gmail.com для пользователей gmail, но принимает другие домены с именем домена, который выбрасывал объект None Type.

Еще раз спасибо за помощь

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

Вам нужно будет изменить код вашего обработчика, который взаимодействует с сущностями профиля, чтобы проверить наличие доступа. Питона hasattr Функция будет делать. Что-то вроде этого:

a_profile = profile.all().somequerystuffheretogetaninstance().get()
if a_profile is not None:
    if not hasattr(a_profile, "access"):
        a_profile.access = whateveryourdefaultdatais
    # perform my data logic normally after this, but remember to persist
    # this to the datastore to save the new access property.
Другие вопросы по тегам