@Todor のコメントに応じて大幅に編集。
[Django 1.7.6 と Python 3.4.1 を使用しています。]
—</p>
そのため、私の Django プロジェクトではItem
、さまざまな特定のサブクラス化モデルを使用してモデルを定義しました。Category
モデルも定義しました。私のモデルのおもちゃバージョンは次のようになります。
models.py
from django.db import models
class Item(models.Model):
name = models.CharField()
class CleeseItem(Item):
cleese = models.URLField()
class GilliamItem(Item):
gilliam = models.IntegerField()
class JonesItem(Item):
jones = models.EmailField()
class Category(models.Model):
title = models.CharField()
item_types = ???? # List of model classes
さて、????
以上が私の質問です。各インスタンスに、サブクラスCategory
のリストを関連付けたいと思います。Item
個々のItem
インスタンスではなく、Item
サブクラスです。
例: 特定のCategory
インスタンスを作成するとします<Category: terry>
。GilliamItem
ここで、とJonesItem
サブクラスが "terry" に属していることを Django に伝えたいと思いますCategory
。
—</p>
これをどのように使用しますか?次のようにビューを書きたいと思います。
ビュー.py
from django.shortcuts import render_to_response, get_object_or_404
from monty.models import Category
def category_page(request, cat_name):
c = get_object_or_404(Category, name=cat_name)
item_dict = {}
for it in c.item_types: # Recall item_types is a list of classes
item_dict.update( {it.verbose_name_plural: it.objects.all()} )
return render_to_response('category_page.html', {'items': item_dict})
Category
つまり、私のビュー (1) はオブジェクトを取得します。(2)キーがそれに関連付けられたモデルの名前でCategory
あり、値がそれらのモデルのすべてのインスタンスを含むクエリセットである辞書を構築します。(3) その辞書をテンプレートに提供します。
例: 私は を訪れhttp://domain.com/category/terry/
ます。Category
ビューはデータベースからオブジェクトを取得しname='terry'
ます。c.item_types
7 行目で が生成[GilliamItem, JonesItem]
されるため、辞書は のようになり{ 'gilliam items': GilliamItem.objects.all(), 'jones items': JonesItem.objects.all() }
ます。
—</p>
最後に、サイト管理者が管理サイトを通じてCategory
オブジェクトと型の間のマッピングを任意に再配置できるようにしたいと思います。(例: ある日、"Terry" を編集してから削除し、場合によっては を追加することにするかもしれません。)Item
Category
JonesItem
item_types
PratchettItem