如何判断Django模型实例是否是另一个模型的子类?

16 投票
4 回答
20901 浏览
提问于 2025-04-15 19:36

我有一个叫做 BankAccount 的类,它是一个基础类。然后我还有两个类,分别是 CheckingAccountSavingsAccount,它们是从 BankAccount 这个类继承来的。

虽然 BankAccount 不是一个抽象类,但我并不直接用它来创建对象,只用它的子类。

接下来,我执行了一个查询,像这样:

account = BankAccount.objects.get(id=10)

我怎么知道这个账户是 CheckingAccount 还是 SavingsAccount 呢?

我现在的做法是这样的:

checking_account = CheckingAccount.objects.get(id=account.id)

如果存在,那就是 CheckingAccount,否则就是 SavingsAccount

4 个回答

0

给你的支票账户和储蓄账户加一个叫 GetAccountType() 的方法。当你从 BankAccount.objects.get() 获取到对象后,就可以调用这个方法。如果所有从 BankAccount 继承的账户都有这个方法,那就没问题了。

11

你可以使用 isinstance(account, SavingsAccount) 来检查一个对象是不是某个特定类型的,但一般来说,大家更喜欢避免使用这个方法,而是通过查看对象的属性来判断,也就是所谓的“鸭子类型推断”。简单来说,就是看看这个对象的特性,看看它是否像是一个子类。

要检查一个对象是否有某个属性,你可以使用一个叫 hasattr 的内置函数,或者使用 getattr 并检查是否会引发一个叫 AttributeError 的错误。

12

试着使用一下 checkingaccountsavingsaccount 这两个属性。用哪个都不会出问题。

撰写回答