У меня есть две таблицы: одна для банковских счетов, а другая для транзакций. Когда пользователь совершает транзакцию (переводит деньги со своей учетной записи на другую учетную запись): сначала я сохраняю номер счета отправителя, номер счета получателя, отправленную сумму и дату транзакции в таблицу транзакций, во-вторых Я также могу вычесть сумму из баланса счета отправителя в таблице счетов, а затем добавить сумму к балансу счета получателя. Все это обрабатывается одним представлением в django.
Две таблицы и представление, которое обрабатывает передачу, выглядят следующим образом:
class Account(models.Model):
ACCOUNT_TYPES = (
('SA' , 'Savings Account' ),
('CA' , 'Current Account' ),
('JA' , 'Joint Account' ),
)
owner = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='accounts', verbose_name='The related user')
account_type = models.CharField(max_length=2, choices=ACCOUNT_TYPES)
account_number = models.CharField(max_length=13, unique=True)
account_balance = models.DecimalField(max_digits=18, decimal_places=2)
last_deposit = models.DecimalField(max_digits=10, decimal_places=2)
interest_rate = models.DecimalField(max_digits=3, decimal_places=0)
date_created = models.DateField(auto_now_add=True)
def __str__(self):
return self.account_number
class Transaction(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, blank=True,
null=True)
from_account = models.CharField(max_length=13)
to_account = models.CharField(max_length=13)
amount = models.DecimalField(max_digits=10, decimal_places=2)
date_created = models.DateField(auto_now_add=True)
def __str__(self):
return str(self.amount)
@login_required(login_url='../../accounts/login/')
def send(request):
if request.method == 'POST':
form = forms.TransactionForm(request.POST)
if form.is_valid():
sender = Account.objects.get(account_number=request.POST.get('from_account'))
if sender.account_balance > decimal.Decimal(request.POST.get('amount')):
trans = form.save()
trans.owner = request.user
trans.save()
# debit the sender account
sender.account_balance -= decimal.Decimal(request.POST.get('amount'))
sender.save()
#credit the receiver account
receiver = Account.objects.get(account_number=request.POST.get('to_account'))
receiver.account_balance += decimal.Decimal(request.POST.get('amount'))
receiver.save()
return HttpResponseRedirect(reverse_lazy('customers:history'))
# else:
# return
else:
form = forms.TransactionForm()
return render(request, "customers/send_money.html", {'form': form})
Но моя проблема в том, как сделать то же самое, когда администратор переводит деньги от имени пользователя. Как вычесть сумму из баланса счета отправителя в таблице счетов, а затем добавить сумму к балансу счета получателя.
Буду очень признателен, если кто-то сможет мне помочь.