LA_*_*LA_ 3 google-app-engine google-cloud-datastore
我们这里说的是数据库结构:
class News(db.Model):
title = db.StringProperty()
class NewsRating(db.Model):
user = db.IntegerProperty()
rating = db.IntegerProperty()
news = db.ReferenceProperty(News)
Run Code Online (Sandbox Code Playgroud)
每个用户只能为每个新闻留下一个评级.以下代码不关心重复:
rating = NewsRating()
rating.user = 123456
rating.rating = 1
rating.news = News.get_by_key_name('news-unique-key')
rating.put()
Run Code Online (Sandbox Code Playgroud)
我该如何修改它将允许每个rating.user和rating.news组合只有一个记录?如果此类评级已存在,则应使用新值进行更新.
使用键名和(可能)父实体来跟踪.例如,假设你有UserInfo一种,你可以这样做:
class NewsRating(db.Model):
# No explicit user reference, since it's the parent entity
rating = db.IntegerProperty(required=True)
news = db.ReferenceProperty(News) # We could get this from the key name, but this is more convenient
rating = NewsRating(parent=current_user, key_name=str(news.key().id()), news=news)
rating.put()
Run Code Online (Sandbox Code Playgroud)
尝试多次添加相同的评级只会覆盖现有的评级,或者您可以使用数据存储区事务以原子方式添加它.
请注意,您几乎肯定会保持对News实体的总评分,而不是计算每个请求的评级,随着评级数量的增加,效率会降低.
| 归档时间: |
|
| 查看次数: |
1446 次 |
| 最近记录: |