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()

そして、これがブロックオブジェクトのリストである代わりに。関連するサブクラスのリストであること。

したがって、製品にTextBlockと2つのImageBlockがある場合。上記では、3つのBlockオブジェクトではなく、TextBlockオブジェクトと2つのImageBlockが返されます。

4

1 に答える 1

1

私はあなたがそれをすることができないことを恐れています。しかし問題は、なぜそれをやりたいのかということです。

続行する前に、もう 1 つ質問があります。これらの「ブロック」をこのようにモデル化すると、データベースに 3 つの異なるテーブル (「BlockType」テーブルを持つ 4 つ) が作成されることをご存知ですか? それはあなたが望むものですか?

これらのモデルで何をしようとしているのか、どのように使用したいのかわからないので、非常に役立つと思われるリンクをいくつか紹介します. 必要に応じて、これらのモデルを使用して何をしようとしているのか、および 2 つの異なるモデルで 1 つのクエリセットを使用する理由について、さらに詳しい情報を提供していただけると、本当に助かります。

これはあなたを助けるかもしれません: 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 に答える