2016-12-08 7 views
1

pytestとFactory BoyでSQLAlchemyモデルをテストしていますが、関係の点ではドキュメントが不足しています。私がしました1対多と多対多のフィールドを持つFactory Boyモデル

_user_groups_table = Table(
    'user_groups', Base.metadata, 
    Column('user_id', INTEGER(unsigned=True), ForeignKey('user.id')), 
    Column('group_id', INTEGER(unsigned=True), ForeignKey('user_group.id')) 
) 


class UserGroup(Base): 
    __tablename__ = 'user_group' 

    id = Column(INTEGER(unsigned=True), Sequence('user_group_id_seq'), primary_key=True, autoincrement=True) 
    name = Column(String(255), unique=True, nullable=False) 


class User(Base): 
    __tablename__ = 'user' 

    id = Column(INTEGER(unsigned=True), Sequence('user_id_seq'), primary_key=True, autoincrement=True) 
    name = Column(String(255), unique=True, nullable=False) 
    groups = relationship('UserGroup', secondary=_user_groups_table) 
    auth_tokens = relationship('Token', cascade='delete') 


class Token(Base): 
    __tablename__ = 'token' 

    id = Column(INTEGER(unsigned=True), Sequence('token_id_seq'), primary_key=True, autoincrement=True) 
    user_id = Column(INTEGER(unsigned=True), ForeignKey('user.id'), nullable=False) 
    value = Column(String(511), unique=True, nullable=False) 

:私は私のスキーマがセットアップされているので、そこに複数のグループに属することができ、ユーザーがある(グループは、複数のユーザーを保持することができます)と、彼らは複数のトークンを持つことができますが、トークンは、単一のユーザーに属しますユーザーのインスタンスにグループ&トークンを追加する@ factory.post_generationメソッドを含むさまざまなことを試していましたが、ユーザーをフィクスチャに入れてテスト機能で使用すると、これらのフィールドは決して表示されません。このスキーマをFactory Boyでモデル化する方法に関する推奨事項はありますか?

答えて

0

私はsqlalchemyの部分のためにこれを書いています。私は工場の男の子について知りません。あなたはすでにあなたのnたとえば、ユーザーとグループ(のUserGroupテーブル)とユーザートークン間のnの関係にしましょうテーブルがあります。

id user_id group_id  id user_id value 
1 5  3    1 5  adb45 
2 5  4    2 5  xyz01 
3 5  5 
4 1  9 
5 1  3  

class User(Base): 
    __tablename__ = "users" 
    id = Column(Integer, primary_key=True, autoincrement=True) 
    name = Column(String(255), unique=True, nullable=False) 

    tokens = relationship("Token", backref="user") 

class Group(Base): 
    __tablename__ = "groups" 
    id = Column(Integer, primary_key=True, autoincrement=True) 
    name = Column(String(255), unique=True, nullable=False) 

class UserGroup(Base): 
    __tablename__ = "usergroups" 
    id = Column(Integer, primary_key=True, autoincrement=True) 
    group_id = Column(Integer, ForeignKey("Group.id")) 
    user_id = Column(Integer, ForeignKey("User.id")) 

class Token(Base): 
    __tablename__ = "tokens" 
    id = Column(Integer, primary_key=True, autoincrement=True) 
    value = Column(String(511), unique=True, nullable=False) 

    user_id = Column(Integer, ForeignKey("User.id")) 

をし、SQLAlchemyのドキュメントが良いです。

+0

答えていただきありがとうございます。私のセッションを自動コミットと自動フラッシュで初期化しようとすると、両方ともFalseに設定されていました。 – sandorlev

関連する問題