Django модель наследования и проверки типов - PullRequest
11 голосов
/ 09 августа 2010
class Machine(models.Model):
    name= models.CharField( max_length=120)
    class Meta:
        abstract = True

class Car(Machine):
    speed = models.IntegerField()

class Computer(Machine)
    ram = models.IntegerField()

Мой вопрос: как я могу понять, какого типа модель машины. Я знаю, что входящий запрос является дочерним элементом модели Machine, но я также хочу знать, что это подмодель автомобиля.

Ответы [ 2 ]

20 голосов
/ 09 августа 2010

Я не уверен, правильно ли я понимаю ваш вопрос. Если вы пытаетесь выяснить тип данного экземпляра, вы можете использовать встроенную функцию type.

an_object = Car(name = "foo", speed = 80)
an_object.save()
type(an_object) # <class 'project.app.models.Car'>

Или, если хотитечтобы проверить, является ли an_object экземпляром Car, вы можете использовать isinstance.

isinstance(an_object, Car) # True
5 голосов
/ 15 января 2018

isinstance будет работать, только если вы выберете объект, вызывающий класс Car. если вы используете Machine.objects.all (), а затем хотите узнать, является ли это машина, вы можете использовать hasattr. как:

o = Machine.objects.all()[0]
print(hasattr(o, 'car'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...