GAE Datastore Put () - PullRequest
       3

GAE Datastore Put ()

3 голосов
/ 23 марта 2010
def post(self):
    update = self.request.get('update')

    if users.get_current_user():
        if update:
            personal = db.GqlQuery("SELECT * FROM Personal WHERE __key__ = :1", db.Key(update))

            personal.name = self.request.get('name')
            personal.gender = self.request.get('gender')
            personal.mobile_num = self.request.get('mobile_num')
            personal.birthdate = int(self.request.get('birthdate'))
            personal.birthplace = self.request.get('birthplace')
            personal.address = self.request.get('address')
            personal.geo_pos = self.request.get('geo_pos')
            personal.info = self.request.get('info')
            photo = images.resize(self.request.get('img'), 0, 80)
            personal.photo = db.Blob(photo)
            personal.put()
            self.redirect('/admin/personal')
        else:
            personal= Personal()

            personal.name = self.request.get('name')
            personal.gender = self.request.get('gender')
            personal.mobile_num = self.request.get('mobile_num')
            personal.birthdate = int(self.request.get('birthdate'))
            personal.birthplace = self.request.get('birthplace')
            personal.address = self.request.get('address')
            personal.geo_pos = self.request.get('geo_pos')
            personal.info = self.request.get('info')
            photo = images.resize(self.request.get('img'), 0, 80)
            personal.photo = db.Blob(photo)
            personal.put()
            self.redirect('/admin/personal')

    else:
        self.response.out.write('I\'m sorry, you don\'t have permission to add this LP Personal Data.')

Если это обновит существующую запись, если 'update' - это строка запроса, содержащая ключ хранилища данных ключа. Я пробую это, но продолжаю добавлять новую запись / сущность. Пожалуйста, дайте мне несколько советов по правильному обновлению записи / сущности.

Исправление? :

def post(self):
    update = self.request.get('update')

    if users.get_current_user():
        if update:
            personal = Personal.get(db.Key(update))

            personal.name = self.request.get('name')
            personal.gender = self.request.get('gender')
            personal.mobile_num = self.request.get('mobile_num')
            personal.birthdate = int(self.request.get('birthdate'))
            personal.birthplace = self.request.get('birthplace')
            personal.address = self.request.get('address')
            personal.geo_pos = self.request.get('geo_pos')
            personal.info = self.request.get('info')
            photo = images.resize(self.request.get('img'), 0, 80)
            personal.photo = db.Blob(photo)
            personal.put()
            self.redirect('/admin/personal')
        else:
            personal= Personal()

            personal.name = self.request.get('name')
            personal.gender = self.request.get('gender')
            personal.mobile_num = self.request.get('mobile_num')
            personal.birthdate = int(self.request.get('birthdate'))
            personal.birthplace = self.request.get('birthplace')
            personal.address = self.request.get('address')
            personal.geo_pos = self.request.get('geo_pos')
            personal.info = self.request.get('info')
            photo = images.resize(self.request.get('img'), 0, 80)
            personal.photo = db.Blob(photo)
            personal.put()
            self.redirect('/admin/personal')

    else:
        self.response.out.write('I\'m sorry, you don\'t have permission to add this LP Personal Data.')

Ответы [ 2 ]

0 голосов
/ 23 марта 2010

Я наконец-то сам отвечаю, спасибо за руководство Ника Джонсона по этому вопросу. Я не могу получить URL-адрес строки запроса как «строковый ключ», который всегда вызывает BadKeyError: недопустимое исключение строкового ключа.

Я пытаюсь поместить эту строку «update» в качестве скрытого поля в форму редактирования html, и это работает, поскольку «update» теперь является действительным «ключом строки».

def post(self):
    update = self.request.get('update')

    if users.get_current_user():
        if update != '':
            personal = Personal.get(db.Key(update))
0 голосов
/ 23 марта 2010

Нет необходимости выполнять запрос, когда вы знаете ключ: просто вызовите db.get () для ключа, чтобы получить его напрямую, что намного быстрее, чем выполнение запроса.

Что касается того, почему вы создаете новую запись каждый раз, похоже, что вы не передаете 'update' на свою страницу правильно. Попробуйте зарегистрировать параметры строки запроса, чтобы увидеть, что происходит не так.

...