2

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

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 对象。

4

1 回答 1

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

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

于 2012-06-02T05:21:45.583 回答