2017-11-19 1 views
0

大丈夫ですので、タイトルが混乱していると確信していますのでここで説明します。私は人々が映画やテレビ番組を検索するためのシンプルなウェブサイトを作成しています。ユーザーであれば、ウォッチリストにムービー/テレビ番組を追加することもできます。今のように、私はこれらのテーブルを持っている:1つのエントリが作成されたときに別のテーブルにエントリを作成します

class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, autoincrement=True, primary_key=True) 
    watchList_id = db.Column(db.Integer, db.ForeignKey('watchList.watchList_id'), nullable=False, autoincrement=True) 
    first_name = db.Column(db.String(120)) 
    last_name = db.Column(db.String(120)) 
    email = db.Column(db.String(180), unique=True) 
    password = db.Column(db.String(255)) 
    is_admin = db.Column(db.Boolean(), default=False) 
    active = db.Column(db.Boolean()) 
    confirmed_at = db.Column(db.DateTime()) 
    roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) 


class watchList(db.Model): 
    __tablename__ = "watchList" 

    watchList_id = db.Column(db.Integer, autoincrement=True, primary_key=True) 
    title = db.Column(db.String(200), unique=True) 
    releaseDate = db.Column(db.Date) 
    producer = db.Column(db.String(100)) 
    description = db.Column(db.String(300)) 
    genre = db.Column(db.String(50)) 
    image = db.Column(db.String(300)) 

私は基本的にユーザーが作成された際に、そのユーザーのウォッチ・リストも作成された場所に機能をしたいが、今、私は彼らの値なしエラーを取得しておきますユーザーが作成されたときにwatchList_idのために私はそれを行う方法を考えなければならないので意味があります。私は何とかuser_id == watchList_idを設定することを考えていましたが、どうやってそれを行うのか分かりませんでした。何か案は?必要に応じてさらにコードを送ることができます。私はフラスコのセキュリティを使用しているので、レジスタのpython /フラスココードを見る方法がわかりません。

答えて

0

私はこの目的のためにカスタムメソッドを使うべきだと思います。それはあなたのために役立つことができますが、私はコードを実行していないので、あなたに合わせて変更することができます。

class watchList(db.Model): 
    __tablename__ = "watchList" 

    watchList_id = db.Column(db.Integer, autoincrement=True, 
    primary_key=True) 
    title = db.Column(db.String(200), unique=True) 
    releaseDate = db.Column(db.Date) 
    producer = db.Column(db.String(100)) 
    description = db.Column(db.String(300)) 
    genre = db.Column(db.String(50)) 
    image = db.Column(db.String(300)) 

    @classmethod 
    def create_func(cls, **kw): 
      obj = cls(**kw) 
      #----creating User object with obj(watchList) 

完了したら教えてください。ありがとうございます。

+0

私はそのクラスメソッドを別の場所で呼びますか?私はUserテーブルを作成するために書いたコードに何かする必要がありますか?また、clsとは何ですか? – humbleCoder

+0

watchListオブジェクトを作成した後、このメソッドを呼び出すと......そしてclsはhttps://stackoverflow.com/questions/7554738/python-self-no-self-and-clsにアクセスしてください。 – GauravInno

0

セッションを正しく使用している場合は、これをユーザーのコンストラクタに追加するのと同じくらい簡単です。ユーザーコンストラクタで新しいウォッチリストオブジェクトを作成し、それをマップされた関係に追加します。ユーザーを作成するための呼び出しがコミットされると、両方が作成され、両方のIDがその時点で取得されます。あなたのコードを見て、それはおそらくあなたは後ろ向きの関係を持っているようです。ウォッチリストがユーザーによって所有されている場合、通常、ウォッチリストにはUserの外部キーであるuser_id列があり、次に「ウォッチリスト」のユーザーにはマップされた関係があります。ユーザーごとに1つしか存在しないようにするには、同じパターンを使用できますが、uselist = False argを関係に渡すことができます。

その後、あなたのユーザークラスが行うことができます:あなたはまだ行っていない場合

class User(db.Model, UserMixin): 
    def __init__(self, **kwargs): 
     # set up cols for user 
     for k,v in kwargs.items(): 
      setattr(self, k, v) 
     # create watchlist: watchlist and user will both get their ids 
     # created at the same time when the session creating User 
     # is committed, and watchlist will have the user_id key too 
     self.watchlist = Watchlist() 

私は優れたSQLAlchemyのORMのチュートリアルを通してあなたの方法を作業をお勧めします。経験則として、何かをid colsで手動で実行する必要がある場合は、間違ったセッションを使用しています。 HTH!

関連する問題