【问题标题】:Django model inheritance: access to child object from parent querysetDjango模型继承:从父查询集访问子对象
【发布时间】:2020-01-07 12:41:45
【问题描述】:

我的 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 中,我有 5 个可用产品的查询集:

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

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

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

【问题讨论】:

    标签: python django inheritance model


    【解决方案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 %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多