如何在django中创建多种类型的模型并使用相同的名称引用它们?

7z5jn7bk  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(273)

我刚到django。我想要账户和交易的功能。帐户可以有三种类型的事务处理。收入、支出和转移。它们之间都有一些共同的领域。但也有一些额外的领域。我想知道我可以做这样的模型,以便我可以访问帐户的所有交易。我还想在rest框架中使用它们。有可能吗?

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, on_delete=models.CASCADE, related_name='transaction')

class Expense(models.Model):
    category = models.CharField(max_length=200)
    transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE, related_name='transaction')

class Transfer(models.Model):
    to = models.ForeignKey(Account, on_delete= models.CASCADE, related_name='to')
    transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE, related_name='transaction')
tez616oj

tez616oj1#

我试着理解你的问题,我会根据我的理解来回答。
所以你的问题就好像你必须创建多个模型(账户、交易(收入、支出、转账))并在一段时间内引用这些细节(账户的交易)。
我可能会回答你的问题,你可以创建5个不同的模型,如你所说。
模型:
帐户-它是所有其他模型的父级。
事务-帐户模型的子级
收入、支出、转移-交易模型的子级
在AccountModel中,您可以创建在您提到的所有模型中使用的公共字段。它是一个主表,其中包含诸如帐号、姓名、移动电话和帐户持有人地址等列。
交易模型应该有账户模型的foreignkey引用,它应该有账户id,以及交易表中需要的其他列。
收入、支出和转移,这些模型应该有一个交易表的参考,如交易id和其他需要的东西。
所以,当您要进行金额转移时,您可能会在转移表中添加一些条目。在此之前,你应该有一个帐户。
现在想象一下,你有一个账户,你想转账,它应该有以下所有步骤:当你转账时,它会生成一个交易id,为此你需要在交易表中做一个条目,它应该参考账户持有人的详细信息。
在事务表中创建一个条目后,需要针对该事务id在传输表中创建一个条目。每当您需要访问转账详细信息时,您都会得到交易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, related_name='transaction', on_delete=models.CASCADE)
    total_expense = models.IntegerField(null=False)

class Transfer(models.Model):
    transaction_id = models.ForeignKey(Account, related_name='transaction', on_delete=models.CASCADE)
    transfer_amount = models.IntegerField(null=False)

相关问题