0

Flask-SQLAlchemyプロジェクトのUserモデルに次の関係フィールドがあります。ユーザーが自動的に自分自身をフォローするように、デフォルト値を設定したいと考えています。 SQLAlchemyのリレーションシップにデフォルト値を設定する方法はありますか?どのように見えるだろうか?SQLAlchemyでリレーションシップのデフォルト値を設定する方法は?

followed = db.relationship('User', secondary=followers, primaryjoin=(followers.c.follower_id == id), 
        secondaryjoin=(followers.c.followed_id == id), 
        backref=db.backref('followers', lazy='dynamic'), 
        lazy='dynamic') 

フォロー機能はこれです:

def follow(self, user): 
     # returns an object if it succeeds, None if it fails 
     if not self.is_following(user): 
      self.followed.append(user) 
      return self 

私は参考のためにミゲルGrinbergのチュートリアルを使用してきたが、私はdb.session.addを行うことができないように私のプロジェクトが設定されている(利用者.follow(user))を実行します。私はbefore_first_requestの前にそれをやったが、unittestingはユーザがログインしていないので匿名で問題がある。初期化時にユーザがデフォルトに従うようにすると、これが解決されます。助けてくれてありがとう!

+0

あなたがログインした後であなたの 'User'dbを更新することはできません。 –

+0

@アイロン私は、ユーザがデフォルトで自分自身に従うようにしようとしていたのですが、ユーザがログインする前にcurrent_user.follow(current_user)でそれをやっていたので(@ app.before_first_requestに)、私は匿名ユーザー。今私は、ログインしたユーザーがデフォルトで自分自身に従うようにする方法を見つけようとしています(またはデフォルトではすべてのユーザーが自分自身に従います) –

答えて

1

あなたのユーザーモデルは新しいメソッドを追加します。

@staticmethod 
def follow(): 
    if not user.is_following(user): 
     user.follow(user) 
     db.session.add(user) 
     db.session.commit()  
+0

それはうまくいくようです。 –

関連する問題