Имеются некоторые проблемы с factory_boy
и SQLAlchemy
, особенно в отношении моделей с отношениями внешних ключей.
У меня есть две следующие модели:
models.py
class Order(db.Model):
__tablename__ = 'order'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(100), nullable=False)
def __init__(self, name):
self.name = name
class OrderItem(db.Model):
__tablename__ = 'order_item'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(100), nullable=False)
order_id = db.Column(db.Integer(), db.ForeignKey('order.id'), nullable=False)
def __init__(self, name, order_id):
self.name = name
self.order_id = order_id
эти модели сопоставлены с фабриками:
factories.py
class OrderFactory(BaseFactory):
class Meta:
model = Order
name = factory.fuzzy.FuzzyText()
class OrderItemFactory(BaseFactory):
class Meta:
model = OrderItem
order_id = factory.SubFactory(OrderFactory)
name = factory.fuzzy.FuzzyText()
Проблема, с которой я продолжаю сталкиваться, это когда я пытаюсь написатьфабрика OrderItem
в базу данных.
testmodels.py
class TestModels(unittest.TestCase):
def setUp(self):
self.app = create_app(config_name='test')
self.context = self.app.app_context()
self.context.push()
db.create_all()
Session.configure(bind=db.engine)
self.session = Session()
factories.OrderItemFactory()
self.session.commit()
Это постоянно выдает ошибку:
InterfaceError: (sqlite3.InterfaceError) Error binding parameter 0 - probably unsupported type. [SQL: u'INSERT INTO order_item (order_id, name) VALUES (?, ?)'] [parameters: (<Order (transient 4383715600)>, u'dpAPssFWksSp')] (Background on this error at: http://sqlalche.me/e/rvf5)
Я ясно вижу, чтобазовый оператор вставки пытается использовать экземпляр модели Order
(<Order (transient 4383715600)>
) в качестве order_id
, но, глядя на документы, я не могу понять, как обойти это.
Любые указателибыло бы замечательно.
У меня такое ощущение, что это как-то связано с установлением других отношений в модели.
Спасибо