Я использую Расширение Playhouse для Peewee, в частности сигналы, так что я могу использовать перехватчики @pre_save и @post_save.
Я настроил его так, как говорится в документах, но по какой-то причине исключения все еще возникают.
Выдержка из кода:
from playhouse.signals import pre_save
from db.config import BaseModel
class Card(BaseModel):
name = CharField(max_length=18)
slug = CharField(max_length=18)
published = BooleanField(default=False)
category = ForeignKeyField(Category, backref='cards')
@pre_save(sender=Card)
def card_pre_save(model, instance, created):
print('testing hook')
if created:
instance.slug = slugify(instance.name)
Я создаю экземпляр как таковой:
from db import models as m
card = m.Card(
name=new_card_name,
category=category,
published=False
)
card.save()
And this is the error I'm getting:
peewee.IntegrityError: null value in column "slug" violates not-null constraint
DETAIL: Failing row contains (2, 2019-02-04 05:41:57.111115, 2019-02-04 05:41:37.75196, cool11, null, f, 2).
Я не понимаю, как я мог получить IntegrityError, если я заполняю поле slug в хуке. Другая проблема заключается в том, что даже оператор print() из хука pre_save не выполняется.
В любом случае, я мог настроить это неправильно?






Вы убедились, что ваш BaseModel наследует класс signal.Model?
http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#signals
To use the signals, you will need all of your project’s models to be a subclass of playhouse.signals.Model, which overrides the necessary methods to provide support for the various signals.