How to structure movies database and user choices?

前端 未结 2 1992
梦如初夏
梦如初夏 2021-01-01 07:47

I would like to create movies database, where user will be able to mark movies he/she watched and liked:

class Movies(ndb.Model):
    watched = ndb.UserPrope         


        
2条回答
  •  感动是毒
    2021-01-01 08:13

    I would go with two different Models, one that stores all the Movies details and one to store the UserChoices :

    class Movies(ndb.Model):
        title = ndb.StringProperty(required=True)
        director = ndb.StringProperty()
        whatever = ndb.StringProperty()
    
    class UsersChoices(ndb.Model):
        movie = ndb.KeyProperty(kind=Movies, required=True)
        watched = ndb.BooleanProperty(required=True)
        liked = ndb.BooleanProperty(required=True)
        user_id = ndb.StringProperty(required=True)
    
        @classmethod
        def get_liked_movies(cls, user_id):
            return cls.query(cls.user_id == user_id, cls.liked == true).fetch(10)
    
        @classmethod
        def get_watched_movies(cls, user_id):
            return cls.query(cls.user_id == user_id, cls.watched == true).fetch(10)
    
        @classmethod
        def get_by(cls, user_id, movie_key):
            return cls.query(cls.user_id == user_id, cls.movie == movie_key).get()
    

    If you need to store informations about users you should create your UserInfo Model, keyed by user_id from the users API, with all the details Properties your application needs.

    class UserInfo(ndb.Model):
            #Keyed by user_id 
            nickname = ndb.StringProperty()
            email = ndb.StringProperty()
    

    To create a new UserInfo, you could do:

    from google.appengine.api import users
    
    user = users.get_current_user()
    userinfo = UserInfo(
            id = user.user_id(),
            nickname = user.keyname(),
            email = user.email()
          )
    userinfo.put()
    

    Then, when the user is logged in, use his/her user_id to retrieve the watched/liked movies.

    from google.appengine.api import users
    
    user = users.get_current_user()
    userinfo = ndb.Key(UserInfo, user.user_id()).get()
    watched_movies = UsersChoices.get_watched_movies(userinfo.key.id())
    liked_movies = UsersChoices.get_liked_movies(userinfo.key.id())
    

提交回复
热议问题