Как определить, является ли экземпляр класса из модели Django подклассом другой модели?

У меня есть класс под названием BankAccount как базовый класс. У меня также есть классы CheckingAccount и SavingsAccount которые наследуются от BankAccount .

BankAccount не является абстрактным классом, но я не создаю из него объект, а только наследующие классы.

Затем я выполняю такой запрос:

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

Как узнать, является ли учетная запись CheckingAccount или SavingsAccount ?

То, как я делаю это сейчас, заключается в следующем:

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

Если он существует, это CheckingAccount , в противном случае это SavingsAccount .

    5 Solutions collect form web for “Как определить, является ли экземпляр класса из модели Django подклассом другой модели?”

    Попробуйте использовать атрибуты savingsaccount и savingsaccount . Тот, который он не взорвется.

    Вы можете использовать isinstance (account, SavingsAccount) , но обычно предпочитаете его избегать и использовать вывод типа утки , просматривая атрибуты объекта и isinstance (account, SavingsAccount) ли он как подкласс.

    Чтобы узнать, имеет ли объект атрибут , вы используете hasattr функцию hasattr встроенную функцию, или используйте getattr и проверяете повышение исключения AttributeError.

    Добавьте метод GetAccountType () к своим учетным записям и сбережениям, когда вы вернете объект из BankAccount.objects.get (), затем вызовите это, если все, что вытекает из BankAccount, имеет этот метод, тогда все будет в порядке.

    После некоторого поиска я нашел решения, схожие с этим: наследование Django multi-table, как узнать, который является дочерним классом модели?

    В принципе, для этого нет элегантного решения. Вы должны сделать кучу утверждений try-except и заставить django использовать нужный вам класс.

    Немного судорожно, но это сработало бы:

     >>> class BankAccount(object): pass ... >>> class SavingsAccount(BankAccount): pass ... >>> class CheckingAccount(BankAccount): pass ... >>> x = SavingsAccount() >>> type(x) == type(SavingsAccount()) True >>> type(x) == type(CheckingAccount()) False 
     
    Interesting Posts for Van-Lav

    Parse config files, environment и аргументы командной строки, чтобы получить один набор параметров

    Как создать случайный диапазон, но исключить конкретный номер?

    могу ли я захватить удаленные исполняемые команды с его выходом в файле журнала в python?

    Как установить Bootstrap numpy в setup.py

    Если у моего имени класса python есть аббревиатура, должен ли я хранить его в верхнем регистре или только первую букву?

    Как получить пользовательский ввод в методе (python)

    конвертировать список в строку для вставки в мой sql в одной строке в python scrapy

    Предотвращение растягивания ярлыков tkinter длинной строкой

    Датстор данных для приложения Google, дата на сегодняшний день на Python?

    Разочарование пытается создать графический интерфейс для скрипта python

    Как проверить подписанные данные с помощью библиотеки PyKCS11

    Как получить доступ к удаленному хранилищу данных при запуске dev_appserver.py?

    sqlalchemy, выберите с помощью обратного включения (не в) список значений дочернего столбца

    Как установить MySql-python-1.2.3 на Mac OS 10.8

    Программа Python для обнаружения пересечения одномерных сегментов линии

    Python - лучший язык программирования в мире.