How can I determine if instance of class from Django model is subclass of another model?

17,774

Solution 1

Try to use the checkingaccount and savingsaccount attributes. The one it is will not blow up.

Solution 2

You could use isinstance(account, SavingsAccount), but is generally preferred to avoid it and use duck type inference by looking at the object's attributes, and see if it quacks like a subclass.

To see if an object has an attribute, you use the aptly named hasattr built-in function or use getattr and check for the raising of an AttributeError exception.

Share:
17,774
dannyroa
Author by

dannyroa

Python, Django, Android http://twitter.com/dannyroa

Updated on June 05, 2022

Comments

  • dannyroa
    dannyroa about 2 years

    I have a class called BankAccount as base class. I also have CheckingAccount and SavingsAccount classes that inherit from BankAccount.

    BankAccount is not an abstract class but I do not create an object from it, only the inheriting classes.

    Then, I execute a query like this:

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

    How do I know if account is CheckingAccount or SavingsAccount?

    The way I do this now is in this way:

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

    If it exists, it is a CheckingAccount, otherwise, it is a SavingsAccount.