我目前正在使用 SQLAlchemy 在我的应用程序中编写测试。
我有tasks
属于plans
。但是tasks
它们在表的外键上是多态的type
。请参阅:定义类后如何设置多态标识?
基本上,根据 to 的外键Type
,Task
可以是TaskA
对象或TaskB
对象,两者都是从子类化的Task
,默认情况下,实例是 a (附加Task
了它自己的)。type
在我的测试BaseTestCas
e 中,我初始化了一个会话setUp
(并在 中关闭它tearDown
)。
当我尝试:
self.task.plan = self.plan
self.session.add_all([self.plan, self.task])
self.task = self.session.merge(self.task)
我收到以下错误:
/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py:154: SAWarning: Flushing object <Task at 0x5b93150> with incompatible polymorphic identity '58dbb417-1cb3-47c8-8bb4-5a7e2fe34498'; the object may not refresh and/or load correctly mapper._validate_polymorphic_identity(mapper, state, dict_)
随后出现错误说明
IntegrityError: (IntegrityError) null value in column "plan_id" violates not-null constraint
即使我plan
正确分配了它。
任何帮助将不胜感激。
(我不确定还有哪些其他信息对此很重要。)