Django模型继承:从父查询集访问子对象

时间:2019-09-04 15:21:48

标签: python django inheritance model

我的django项目中有一些这样的模型:

class Product(models.Model):
    name = models.Charfield(max_length=20)
    available = models.BooleanField(default=True)

class Tea(Product):
    image = models.ImageField(upload_to='products/tea')

class Coffee(Product):
    image = models.ImageField(upload_to='products/coffee')

在ListView中,我有queryset,它为我提供5种可用产品:

Product.objects.filter(available=True)[:5]

在我的模板中,我想从Tea / Coffee渲染图像,如何从Product queryset访问Tea / Coffee子对象?

{% for product in products %}
    {{ product.????.image.url }}
{% endfor %}

1 个答案:

答案 0 :(得分:1)

我用django-model-utils包解决了这个问题。

更新父模型:

from model_utils.managers import InheritanceManager

class Product(models.Model):
    ...
    objects = InheritanceManager()

我的查询集:

Product.objects.filter(available=True).select_subclasses()[:5]

现在我可以在子模型的模板属性中使用

{% for product in products %}
    {{ product.image.url }}
{% endfor %}