Не съм 100% сигурен за PostgreSQL
синтаксис, но след добавяне към вашите BudgetCategories
моделът трябва да свърши работа с помощта на CheckConstraintкод>
:
class BudgetCategories(Base):
__tablename__ = 'budget_categories'
# ...
# @note: new
__table_args__ = (
CheckConstraint('NOT(category IS NULL AND parent_category IS NULL)'),
)