如何判断Django模型实例是否是另一个模型的子类?
我有一个叫做 BankAccount
的类,它是一个基础类。然后我还有两个类,分别是 CheckingAccount
和 SavingsAccount
,它们是从 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
试着使用一下 checkingaccount
和 savingsaccount
这两个属性。用哪个都不会出问题。