如何获取查询集以返回Django中的多个模型?

时间:2012-06-02 03:59:58

标签: django orm django-models

我正在构建一个带有基本块模型的块系统,每种类型的块都是一个单独的子类,如下所示:

class BlockType(models.Model):
    ''' Defines properties of a block '''
    title = models.CharField(max_length=50)
    class_name = models.CharField(max_length=50)

class Block(models.Model):  
    ''' Implementation of the block '''
    product = models.ForeignKey('product.Product', related_name='blocks')
    block_type = models.ForeignKey('product.BlockType', related_name='used_blocks')
    order = models.IntegerField(default=0)

class ImageBlock(Block):
    ''' An image block '''
    image = models.CharField(max_length=255)

class TextBlock(Block):
    ''' A text block '''
    text = models.TextField()

我希望能够做的是:

b = product.blocks.all()

而不是这是一个Block对象列表。作为相关子类的列表。

因此,如果产品具有TextBlock和2个ImageBlocks。上面会返回一个TextBlock对象和2个ImageBlocks而不是3个Block对象。

1 个答案:

答案 0 :(得分:1)

我很害怕你做不到。但问题是:为什么要这样做?

在继续之前,我还有另一个问题:您是否知道按照您的方式对这些“块”进行建模,您将在数据库中获得3个不同的表(4个带有“BlockType”表)?这就是你想要的吗?

我不知道你将如何处理这些模型以及你想如何使用它们,所以我会给你一些我认为可以帮助你很多的链接。如果您愿意,您可以向我们提供有关您将如何处理这些模型的更多信息,以及为什么您希望使用具有两个不同模型的单个查询集,以便我们真正为您提供帮助。

这可以帮助您:https://docs.djangoproject.com/en/dev/topics/db/models/#proxy-models

或者:https://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes

希望它有所帮助!如果不是,请添加更多信息以帮助我们了解您的问题并尝试给您答案