使用peewee async时,尝试更新对象时出错:
Traceback (most recent call last):
File "./src/models/module.py", line 74, in run
await self._stage_alert_attach(target_alert)
File "./src/models/module.py", line 293, in _stage_alert_attach
await target_alert.attach(unattached_issues)
File "./src/models/alert.py", line 127, in attach
await issue.attach(self)
File "./src/models/issue.py", line 81, in attach
await self.async_save()
File "./src/models/base.py", line 40, in async_save
return await self._manager.update(self, only=self.dirty_fields)
File "/usr/local/lib/python3.6/site-packages/peewee_async.py", line 227, in update
query = obj.update(**field_dict).where(obj._pk_expr())
TypeError: update() got an unexpected keyword argument 'alert_id'
我无法弄清楚发生了什么,因为该字段是在基类中定义的:
class BaseIssue(BaseModel):
# Database fields
id = peewee.PrimaryKeyField()
module_id = peewee.IntegerField()
model = peewee.CharField(index=True)
model_id = peewee.CharField(index=True)
status = peewee.CharField(index=True)
metadata = JSONField()
alert_id = peewee.IntegerField(null=True)
created_at = peewee.DateTimeField(default=datetime.datetime.now)
solved_at = peewee.DateTimeField(null=True)
expired_at = peewee.DateTimeField(null=True)
class Meta:
def db_table_func(model_cls): return "Issues"
还尝试使用alert
代替alert_id
并将其用作外键,但遇到了相同的错误(现在使用alert关键字)。
我认为继承可能存在问题,因为继承此基类是为了创建将再次继承的DefaultIssue类。出于某种原因,update()
方法不期望此参数。
以下是__dict__
电话之前的对象self.async_save()
和字段的打印件:
>>> obj.__dict__
{
"_data": {
"created_at": datetime.datetime(2017, 10, 10, 17, 6, 8, 47075),
"id": 2,
"module_id": 3,
"model": "transaction",
"model_id": "23765771",
"status": "active",
"metadata": {
"transaction_id": 23765771,
"boleto_url": None,
"boleto_barcode": None
},
"alert_id": None,
"solved_at": None,
"expired_at": None
},
"_dirty": set(),
"_obj_cache": {},
"_logger": <Logger Issue 2 (INFO)>
}
>>> obj._meta.fields
{
"id": <peewee.PrimaryKeyField object at 0x7f49fdb2e198>,
"module_id": <peewee.IntegerField object at 0x7f49fdb2e3c8>,
"model": <peewee.CharField object at 0x7f49fdb2e710>,
"model_id": <peewee.CharField object at 0x7f49fdb2e7f0>,
"status": <peewee.CharField object at 0x7f49fdb2e860>,
"metadata": <playhouse.postgres_ext.JSONField object at 0x7f49fdb2e8d0>,
"alert_id": <peewee.IntegerField object at 0x7f49fdb2e940>,
"created_at": <peewee.DateTimeField object at 0x7f49fdb2e9b0>,
"solved_at": <peewee.DateTimeField object at 0x7f49fdb2ea20>,
"expired_at": <peewee.DateTimeField object at 0x7f49fdb2ea90>
}
如果我能提供更多信息,请询问。我不知道该怎么办了。
答案 0 :(得分:0)
好的,我真傻。刚注意到我已经覆盖了更新方法。