如何制作多种类型的模型并在 Django 中以相同的名称引用它们?

问题描述

我是 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)