Джанго, наследование модели: как привести объект родительского класса к дочернему объекту - PullRequest
0 голосов
/ 17 июня 2019

Контекст

У меня есть следующие модели:

# carts/models.py
class Cart(models.Model):

    # Used to determine card type when inheriting. See example.
    content_type = models.ForeignKey(ContentType)


class SingleProductCart(Cart):
    """Regular cart with single product."""

    @property
    def product(self):
       pass


# orders/models.py
class Order(models.Model):

    # Has to work with any Cart subclass.
    cart = models.ForeignKey(to='carts.Cart')

Итак, я наткнулся на следующий код:

def do_something_with_single_product_order(order):
    # We assume there that order.cart is a SingleProductCart instance.
    assert order.content_type.model_class() == SingleProductCart  # True
    do_something_with_product(order.cart.product)  # Attribute error.

Что вызывает исключение, потому что атрибут order.cart относится к экземпляру модели корзины вместо SingleProductCart и не имеет атрибута product.

Вопрос

Как я могу привести экземпляры модели Cart к SingleProductCart без дополнительных запросов к базе данных или как организовать мои модели, чтобы они возвращали объект правильного класса?

...