针对@Todor 的评论进行了大量编辑。
[我使用 Django 1.7.6 和 Python 3.4.1。]
——</p>
因此,在我的 Django 项目中,我定义了一个Item
具有各种特定子类模型的模型。我还定义了一个Category
模型。我的模型的玩具版本如下所示:
模型.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>
。现在我想告诉 DjangoGilliamItem
和JonesItem
子类属于 "terry" 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})
即,我的视图(1)检索一个Category
对象;(2) 构造一个字典,其中键是与之关联的模型的名称,Category
值是包含这些模型的所有实例的查询集;(3) 将该字典提供给模板。
示例:我访问http://domain.com/category/terry/
. 视图从数据库中检索Category
对象。在第 7 行产生,所以字典最终看起来像name='terry'
c.item_types
[GilliamItem, JonesItem]
{ 'gilliam items': GilliamItem.objects.all(), 'jones items': JonesItem.objects.all() }
.
——</p>
最后,我希望站点管理员能够通过管理站点任意重新安排Category
对象和Item
类型之间的映射。(例如:有一天我可能会决定编辑“特里”以从Category
中删除,并可能添加。)JonesItem
item_types
PratchettItem