映画データベースを作成したいと思います。このデータベースでは、ユーザーが視聴して気に入った映画にマークを付けることができます。
class Movies(ndb.Model):
watched = ndb.UserProperty()
liked = ndb.UserProperty()
それは機能しますか?私はGoogleアカウントを使用しています。ユーザーが気に入ったすべての映画を後でどのように選択すればよいですか?
Upd。私は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