我正在学习如何使用Google App Engine / Python。 (web应用)
我来自Java(可能是我的问题!),如果我将对象放在Swing列表框中,它会调用它们的toString()方法进行显示。当我选择其中一个时,它将返回对象,而不仅仅是toString()生成的对象的表示。
我有一个Person模型,其中包含人员详细信息:
class Person(db.Model):
'''represents a single person'''
first = db.StringProperty()
last = db.StringProperty()
address = db.StringProperty()
city = db.StringProperty()
region = db.StringProperty()
postal = db.StringProperty()
country = db.StringProperty()
phone = db.StringProperty()
cell = db.StringProperty()
email = db.StringProperty()
comment = db.StringProperty(multiline=True)
预订模型,用于存储有关房间的信息,并存储人员所属的预订:
class Reservation(db.Model):
'''represents a single reservation'''
room = db.StringProperty()
start_day = db.IntegerProperty()
start_month = db.IntegerProperty()
start_year = db.IntegerProperty()
end_day = db.IntegerProperty()
end_month = db.IntegerProperty()
end_year = db.IntegerProperty()
percent_discount = db.IntegerProperty()
comment = db.StringProperty(multiline=True)
client = #what would go here?
要获取用户的预订信息,并将预订放入数据库,我有一个HTML表单,其中包含各个字段,包括房间,到达日期,出发日期等。其中一个包含“客户列表”已存在于数据库中的人员列表:
<select size="5" name="client_list">
{% for person in clients %}
<option>{{ person.first|escape }} {{ person.last|escape }}</option>
{% endfor %}
</select>
这可以显示名称,但我不知道如何将选中的“Person”或客户端存储到预订中,如下代码所示:
class Bookings(webapp.RequestHandler):
'''Handles all of the bookings'''
def post(self):
'''adds a new booking into the db'''
reservation = models.Reservation()
reservation.room = self.request.get('room')
reservation.start_day = int(self.request.get('start_day'))
reservation.start_month = util.month_to_int(self.request.get('start_month'))
reservation.start_year = int(self.request.get('start_year'))
reservation.end_day = int(self.request.get('end_day'))
reservation.end_month = util.month_to_int(self.request.get('end_month'))
reservation.end_year = int(self.request.get('end_year'))
reservation.percent_discount = int(self.request.get('percent_discount'))
reservation.comment = self.request.get('comment')
#This would get the clients first + last name, but not the object Person
#reservation.client = self.request.get('client_list')
reservation.put()
self.redirect('/bookings')
我开始关注Keys(特别是db.Key.from_path),以及GAE中每个人如何生成一个唯一的ID,但后来我仍然不知道如何从一个人那里获得一个唯一的ID。如果显示的所有内容都是人名,则显示在HTML中的列表。
这似乎是可能的,可能很简单,但经过两天的搜索,我什么都没有想出来。如果我应该提供更多信息,请告诉我,这是我在Stack Overflow上的第一篇文章!谢谢你的任何建议。
答案 0 :(得分:5)
因此,您必须传递客户的 key
,不是全名。修复模板代码:
<select size="5" name="client">
{% for person in clients %}
<option value="{{ person.key }}">
{{ person.first|escape }} {{ person.last|escape }}
</option>
{% endfor %}
</select>
指出<option>
元素具有自己的value
属性。请注意,我将<select>
元素的名称从cleint_list
更改为client
的原因是它无法选择多个项目,只能选择一个项目。
然后,通过其密钥检索客户端实例。根据文件:
因此,请在您的应用程序中插入以下代码:
client_key = Key(self.request.get('client'))
client = Person.get(client_key)
if client is None:
# in case the passed key isn't available
return
reservation.client = client