我目前正在我的应用程序中编写测试,它使用了SQLAlchemy。
我tasks
属于plans
。但是tasks
在type
表的外键上是多态的。请参阅:How can I set Polymorphic Identity after a class is defined?
基本上,根据Type
的外键,Task
可以是TaskA
对象或TaskB
对象,这两个对象都来自Task
和默认情况下,实例是Task
(附加了自己的type
)。
在我的测试BaseTestCas
中,我在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
。
任何帮助将不胜感激。
(我不确定其他哪些信息对此很重要。)