Каков наилучший способ обеспечить сбалансированность транзакций в бухгалтерии с двумя записями?
Я создаю приложение для бухгалтерии двойной записи в Django.У меня есть эти модели:
class Account(models.Model):
TYPE_CHOICES = (
('asset', 'Asset'),
('liability', 'Liability'),
('equity', 'Equity'),
('revenue', 'Revenue'),
('expense', 'Expense'),
)
num = models.IntegerField()
type = models.CharField(max_length=20, choices=TYPE_CHOICES, blank=False)
description = models.CharField(max_length=1000)
class Transaction(models.Model):
date = models.DateField()
description = models.CharField(max_length=1000)
notes = models.CharField(max_length=1000, blank=True)
class Entry(models.Model):
TYPE_CHOICES = (
('debit', 'Debit'),
('credit', 'Credit'),
)
transaction = models.ForeignKey(Transaction, related_name='entries')
type = models.CharField(max_length=10, choices=TYPE_CHOICES, blank=False)
account = models.ForeignKey(Account, related_name='entries')
amount = models.DecimalField(max_digits=11, decimal_places=2)
Я бы хотел навязать сбалансированные транзакции на уровне модели, но в правильном месте, похоже, нет зацепок.Например, Transaction.clean не будет работать, потому что сначала сохраняются транзакции, а затем добавляются записи из-за Entry.transaction ForeignKey.
Я бы хотел, чтобы проверка баланса также работала в пределах администратора.В настоящее время я использую EntryInlineFormSet с чистым методом, который проверяет баланс в админке, но это не помогает при добавлении транзакций из скрипта.Я готов изменить свои модели, чтобы сделать это проще.