我正在构建一个带有基本块模型的块系统,每种类型的块都是一个单独的子类,如下所示:
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对象。
答案 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
希望它有所帮助!如果不是,请添加更多信息以帮助我们了解您的问题并尝试给您答案