Я пытаюсь создать функцию в своем приложении, в которой пользователь может связать текущее местоположение со своей учетной записью. Пользователи могут добавлять несколько местоположений, и когда добавляется местоположение, оно добавляется как дочерний элемент этого пользователя. Чтобы позволить пользователю установить свое текущее местоположение, я создал форму, в которой он указывает, какое местоположение он хочет установить в качестве своего текущего местоположения. Шаблон для этого выглядит следующим образом:
<form action="setlocation" method="post">
<table id="locationform" class="fitted">
<tr>
<td colspan="3"><b>Location settings</b></td>
</tr>
<tr>
<td class="label">Current location</td>
<td class="input">
<select name="lockey">
{% for i in locinfo %}
<option value="{{i.key}}">{{i.locname}}</option>
{% endfor %}
</select>
</td>
<td><input type="submit" value="Set Location"></td>
</tr>
<tr>
<td colspan="3"><a href="/addlocation">Add new location</a></td>
</tr>
</table>
</form>
Таким образом, значение каждого выбора является ключом для этого местоположения. Форма отправляет в / setlocation, которая обрабатывается следующим образом:
class SetLocation(BaseHandler):
def post_secure(self):
userdata = db.GqlQuery("SELECT * FROM User WHERE fbid = :1", self.user['uid'])[0]
userdata.currentloc = self.request.get('lockey')
logging.warn("Current location saved")
userdata.put()
self.redirect('/account')
... однако, когда я иду в хранилище данных, значение currentloc не имеет значения. В обработчике для / account я поместил строку для регистрации ключа currentloc пользователя и получил в журнале сообщение об ошибке «BadKeyError: Невозможно закодировать строку как неполный ключ!». Я не вижу, где ключ был изменен по пути, поэтому я думаю, что это связано с преобразованием между строками (для страницы) и типом db.Key ().
EDIT
Это полная трассировка стека ошибки:
Traceback (последний вызов был последним):
Файл "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/logging/init.py", строка 744, в emit
msg = self.format (запись)
Файл "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/logging/init.py", строка 630, в формате
вернуть fmt.format (запись)
Файл "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/logging/init.py", строка 418, в формате
record.message = record.getMessage ()
Файл "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/logging/init.py", строка 288, в getMessage
msg = msg% self.args
Файл "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore_types.py", строка 595, в str
'Нельзя строковое кодирование неполного ключа! \ N% s' ссылка на% self .__)
BadKeyError: Невозможно закодировать строку в виде неполного ключа!