Я бы рассчитывал оплату на основе атрибутов дочернего элемента, поэтому при обновлении дочернего элемента платеж будет меняться. Платеж не будет записываться в базу данных до тех пор, пока он не будет оплачен, платеж будет рассчитываться каждый раз, когда пользователь запрашивает его.
class Child(object):
def __init__(self,income,paydate,meals=False,workshops=False):
self.income = income
self.paydate = paydate
...
У меня также будет модель правил ценообразования, которая в сочетании с дочерним объектом даст вам сумму платежа. Повторное обновление Правил ценообразования приведет к изменению платежа.
class PricingRules(object):
def __init__(self,income_scale,paydate,meal_price,workshop_price,num_payments):
...
Я бы не использовал объект PricingRules для каждого дочернего элемента. Тогда будет Платежный объект
class Payment(object):
def __init__(self,amount,date_paid):
...
Я избегал показывать какой-либо код, относящийся к используемому ORM, я считаю, что дизайн должен быть сам по себе, и мне также нравится оставлять возможность использования объектов без ORM. Использование конструкторов - это также мой личный стиль, мне нравится знать, что когда объект создается из класса, он будет в состоянии, которое хорошо определено и стабильно. Без более подробной информации о бизнес-логике у меня больше вопросов, чем ответов за пределами этого пункта.