Простой Peewee ORM Python Bug - сохранить хук - PullRequest
0 голосов
/ 04 февраля 2019

Я использую расширение 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 не выполняется.

В любом случае, я мог бы неправильно это настроить?

1 Ответ

0 голосов
/ 04 февраля 2019

Убедитесь, что ваш BaseModel наследует сигналы. Класс модели?

http://docs.peewee -orm.com / ru / latest / peewee / playhouse.html # сигналов

Чтобы использовать сигналы, вам нужно, чтобы все модели вашего проекта были подклассом playhouse.signals.Model, который переопределяет необходимые методы для поддержки различных сигналов.

...