Обновление модели на сервере хранилища данных Gae - PullRequest
1 голос
/ 16 ноября 2010

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

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

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

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

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

Обновление: Выяснилось, что один из объектов из класса профиля возвращается как 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 ]

1 голос
/ 18 ноября 2010

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

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

0 голосов
/ 16 ноября 2010

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

Вам потребуется изменить код обработчика, который взаимодействует с объектами профиля, чтобыпроверить на наличие доступа.Функция Python 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.
...