是抽象类还是通用django类继承?

时间:2018-11-14 13:25:01

标签: django class inheritance abstract-class

我希望能够获取我的应用程序中所有钱包的列表-但每个钱包都需要指定为UserWallet,TeamWallet,CarWallet等。不应有通用的钱包实例。我仍然希望能够在其他模型(例如付款模型)中将外键设置为通用钱包模型,或者以某种方式链接到钱包,而每个子模型都没有一个外键。

我看到了通用类继承的这些优点:

  • 我可以获得所有钱包的清单
  • 我可以为父钱包模型设置外键

通用类继承的缺点:

  • 我不能禁止创建通用钱包继承。
  • 数据库中JOIN的原因变慢
  • 令人困惑的数据库结构

我看到了使用抽象类继承的这些优点:

  • 不可能有通用的钱包实例。
  • 简单的数据库表结构。

抽象类继承的缺点:

  • 我需要使用itertools或其他黑客工具来获取所有钱包的列表。
  • 我需要为外部模型中的每个子模型设置一个外键,或者使用慢速的内容类型键。

由于我是Python和Django开发的新手,我想我遗漏了很多要点。您如何解决这些情况?

样机结构示例:

class Wallet(models.Model):
    status = models.CharField(max_length=10)
    is_default = models.NullBooleanField() 

class UserWallet(Wallet):
    user = models.ForeignKey(User, on_delete=models.CASCADE)

class TeamWallet(Wallet):
    team = models.ForeignKey(Team, on_delete=models.CASCADE)


class Payment(models.Model):
    wallet = models.ForeignKey(Wallet, on_delete=models.CASCADE)

感谢您的帮助和任何想法。

0 个答案:

没有答案