使用Factory Boy使用Flask和SQLAlchemy定义三个相互关联的模型

使用Factory Boy使用Flask和SQLAlchemy定义三个相互关联的模型,sqlalchemy,factory-boy,Sqlalchemy,Factory Boy,我试图在Flask/SQLAlchemy站点中为三个关系复杂的模型创建FactoryBoy工厂。这些模型是: 从sqlalchemy.orm导入backref 从..共享导入数据库 类用户(db.Model): __tablename_=“用户” id=db.Column(db.Integer,主键=True) 类OAuth(db.Model): __tablename=“flask\u dance\u oauth” user\u id=db.Column(db.Integer,db.Forei

我试图在Flask/SQLAlchemy站点中为三个关系复杂的模型创建FactoryBoy工厂。这些模型是:

从sqlalchemy.orm导入backref
从..共享导入数据库
类用户(db.Model):
__tablename_=“用户”
id=db.Column(db.Integer,主键=True)
类OAuth(db.Model):
__tablename=“flask\u dance\u oauth”
user\u id=db.Column(db.Integer,db.ForeignKey(user.id),nullable=False)
provider\u user\u id=db.Column(db.String(40),nullable=False)
user=db.relationship(
用户,
lazy=“已加入”,
uselist=False,
backref=backref(“oauth”,uselist=True,lazy=“select”),
)
类TwitterUserData(db.Model):
“存储有关用户twitter帐户的数据。”
__tablename=“twitter\u用户\u数据”
id=db.Column(db.Integer,主键=True)
id_str=db.Column(db.String(191),nullable=False,unique=True)
user=db.relationship(
“用户”,
secondary=“flask\u dance\u oauth”,
primaryjoin=“和”
OAuth.provider\u user\u id==TwitterUserData.id\u str
“OAuth.provider=='twitter'”
")",
secondaryjoin=“User.id==OAuth.User\u id”,
uselist=False,
lazy=“选择”,
viewonly=True,
backref=backref(“twitter_数据”,uselist=False,lazy=“select”),
)
要总结这些关系,请执行以下操作:

  • User.oauth
    是一个
    oauth
    对象
  • User.id
    映射到
    OAuth.User\u id
  • User.twitter\u data
    是一个
    TwitterUserData
    对象
  • TwitterUserData.user
    是一个
    user
    对象
  • TwitterUserData.id\u str
    映射到
    OAuth.provider\u user\u id
我的工厂目前:

进口工厂
类OAuthFactory(factory.alchemy.SQLAlchemyModelFactory):
类元:
模型=OAuth
sqlalchemy_session=db.session
sqlalchemy\u session\u persistence=“提交”
类TwitterUserDataFactory(factory.alchemy.SQLAlchemyModelFactory):
类元:
model=TwitterUserData
sqlalchemy_session=db.session
sqlalchemy\u session\u persistence=“提交”
id_str=factory.Sequence(lambda n:(n*10000000000000))
类UserFactory(factory.alchemy.SQLAlchemyModelFactory):
类元:
模型=用户
sqlalchemy_session=db.session
sqlalchemy\u session\u persistence=“提交”
twitter\u data=factory.SubFactory(TwitterUserDataFactory)
oauth=factory.SubFactory(
非统组织工厂,
user\u id=factory.SelfAttribute(“…id”),
provider\u user\u id=factory.SelfAttribute(“…twitter\u data.id\u str”),
)
使用此选项,无法设置oauth.user\u id,因为“参数'id'未知。”

相反,我尝试这样定义
oauth
,希望在
post_-generation
中,用户将拥有
id

@factory.post\u生成
def oauth(对象、创建、提取、**kwargs):
如果没有,请创建:
返回
oauth=oauth_工厂(
用户标识=对象标识,
provider\u user\u id=obj.twitter\u data.id\u str
)
返回oauth
但是在这里,
obj.twitter\u data
是一个
'NoneType'对象
,这让我很困惑

我不知道还能尝试什么