我希望创建一个电影数据库,用户可以标记他/她观看和喜欢的电影:
然而,使用这种方法,如果我没有传递“liked”,那么它的值将被覆盖为“None”(同样的情况也适用于“watched”,如果未传递,则使用“None”)。
class Movies(ndb.Model):
watched = ndb.UserProperty()
liked = ndb.UserProperty()
这样可以吗?我使用谷歌账户。 如何后来选择用户喜欢的所有电影?
更新。我按照 systempuntoout 的方法,使用以下代码保存用户选择:
user = users.get_current_user()
if user:
userschoices = models.UsersChoices(
movie=ndb.Key(models.Movies, movie_id), # TODO: what if movie_id is wrong?
watched=True,
user_id=user.user_id()
)
try:
userschoices.put()
self.response.out.write('1')
except:
self.response.out.write('0')
但如果用户多次进行选择,则会向数据存储中添加多条记录... 那么只保存用户 ID 和电影 ID 作为键名是否更好呢?
userschoices = models.UsersChoices.get_by_id(user.user_id() + '-' + movie_id)
if userschoices is None:
userschoices = models.UsersChoices(id=user.user_id() + '-' + movie_id)
userschoices.movie = ndb.Key(models.Movies, movie_id) # TODO: what if movie_id is wrong?
userschoices.user_id = user.user_id()
if option == 'liked':
userschoices.liked = True
elif option == 'watched':
userschoices.watched = True
然而,使用这种方法,如果我没有传递“liked”,那么它的值将被覆盖为“None”(同样的情况也适用于“watched”,如果未传递,则使用“None”)。