问题描述
我是 Django 的新手。 我想要帐户和交易的功能。帐户可以有三种类型的交易。收入、支出和转移。它们之间都有一些共同的领域。但也有一些额外的字段。我想知道我可以制作这样的模型,以便我可以访问帐户的所有交易。 我也想在休息框架中使用它们。可以这样做吗?
from django.db import models
class Account(models.Model):
name = models.CharField(max_length=50)
balance = models.DecimalField(max_digits=7,decimal_places=1)
def __str__(self):
return self.name
class Transaction(models.Model):
amount = models.DecimalField(max_digits=7,decimal_places=1)
title = models.CharField(max_length=200)
date_created = models.DateTimeField(auto_Now=True,auto_Now_add=False)
account = models.ForeignKey(Account,on_delete=models.CASCADE,related_name='account')
def __str__(self):
return str(self.amount)
class Income(models.Model):
source = models.CharField(max_length=200)
transaction = models.ForeignKey(Transaction,related_name='transaction')
class Expense(models.Model):
category = models.CharField(max_length=200)
transaction = models.ForeignKey(Transaction,related_name='transaction')
class Transfer(models.Model):
to = models.ForeignKey(Account,on_delete= models.CASCADE,related_name='to')
transaction = models.ForeignKey(Transaction,related_name='transaction')
解决方法
我已经试着理解你的问题,我会根据我的理解来回答。
所以您的问题就像您必须创建多个模型(帐户、交易(收入、费用、转账))并一次性参考这些详细信息(帐户的交易)。
我可能会回答你的问题,你可以像你提到的那样创建 5 个不同的模型。
模型:
帐户 - 它是所有其他模型的父级。
交易 - 帐户模型的子级
收入、费用、转移 - 交易模型的子项
在帐户模型中,您可以创建在您提到的所有模型中使用的通用字段。这是一个主表,其中包含帐户持有人的帐号、姓名、手机和地址等列。
Transaction 模型应该有 Account 模型的 Foreignkey 引用,它应该有 account_id 和其他需要在交易表中的列。
收入、支出和转移,这些模型应该有一个交易表的参考,比如transaction_id和其他需要的东西。
因此,当您要进行金额转账时,您可能会在转账表中添加一些条目。在此之前,您应该拥有一个帐户。
现在想象一下,你有一个账户,你想转移一些金额,它应该有以下所有步骤: 当您转账时,会生成一个transaction_id,为此您需要在Transation表中做一个条目,该条目应参考帐户持有人的详细信息。
在事务表中创建条目后,根据该事务_id,您需要在传输表中创建一个条目。每当您需要访问转移详细信息时,您都会获得 transaction_id 和帐户详细信息,因为它是您的表的主要内容。
class Account(models.Model):
account_number = models.IntegerField(null=False)
account_type = models.CharField(max_length=100,null=True)
account_holder = models.CharField(max_length=100,null=True)
class Transaction(models.Model):
account = models.ForeignKey(Account,related_name='account',on_delete=models.CASCADE)
transation_number = models.IntegerField(null=False)
class Income(models.Model):
transaction_id = models.ForeignKey(Account,related_name='transaction',on_delete=models.CASCADE)
total_income = models.IntegerField(null=False)
class Expense(models.Model):
transaction_id = models.ForeignKey(Account,on_delete=models.CASCADE)
total_expense = models.IntegerField(null=False)
class Transfer(models.Model):
transaction_id = models.ForeignKey(Account,on_delete=models.CASCADE)
transfer_amount = models.IntegerField(null=False)