def save(self, *args, **kwargs):
if not self.is_paid:
if self.date <= date.today():
self.pay()
super(CompanyToClientPayment, self).save(*args, **kwargs)
def pay(self):
if not self.is_paid:
self.client.capital += self.total
self.is_paid = True
self.client.save(newbie=False)
self.save()
Смотрите, что у вас получается. Сначала вызывается pay(), которая делает save(), т.е. сохраняет модель, даёт ей id. Ладно. Дальше запускается super(...).save(), которая опять сохраняет, причём сохраняя все аргументы, среди которых наверняка есть force_insert=True. Посему, прежде всего нужно, я думаю, отрефакторить код так, чтобы двух подряд сохранений не было.