While using peewee async, got an error when trying to update an object:
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'
I can't figure out what's happening because the field is defined in the base class:
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"
Also tried to use alert
instead of alert_id
and using it as a foreign key, but got the same error (now with the alert keyword).
I think there might be a problem with inheritance, as this base class is inherited to create an DefaultIssue class that will be inherited again. For some reason the update()
method is not expecting this parameter.
Here's a print of the object __dict__
and fields right before the self.async_save()
call:
>>> 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>
}
If there's any more information I can provide, ask please. I don't know what to do anymore.
Ok, I'm so stupid. Just noticed I've overriden the update method.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.