-1

@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_types7 行目で が生成[GilliamItem, JonesItem]されるため、辞書は のようになり{ 'gilliam items': GilliamItem.objects.all(), 'jones items': JonesItem.objects.all() }ます。

—</p>

最後に、サイト管理者が管理サイトを通じてCategoryオブジェクトと型の間のマッピングを任意に再配置できるようにしたいと思います。(例: ある日、"Terry" を編集してから削除、場合によっては を追加することにするかもしれません。)ItemCategoryJonesItemitem_typesPratchettItem

4

2 に答える 2

1

django-polymorphicを見てください。継承されたモデルに外部キーと多対多の関係を提供します。

于 2015-03-18T07:44:12.147 に答える