Django以一种通用的方式向上或向下传播人际关系
我正试图重写Django代码,使其在所有级别上尽可能通用。假设我有以下型号:Django以一种通用的方式向上或向下传播人际关系,django,generics,views,relationships,django-generic-views,Django,Generics,Views,Relationships,Django Generic Views,我正试图重写Django代码,使其在所有级别上尽可能通用。假设我有以下型号: class Tvshow(models.Model): pass class Season(models.Model): tvshow = models.ForeignKey(Tvshow) class Episode(models.Model): season = models.ForeignKey(Season) 电视剧有季,一季有集。为了简单起见,我省略了所有其他信息 这些对象的“我
class Tvshow(models.Model):
pass
class Season(models.Model):
tvshow = models.ForeignKey(Tvshow)
class Episode(models.Model):
season = models.ForeignKey(Season)
电视剧有季,一季有集。为了简单起见,我省略了所有其他信息
这些对象的“我的详细视图”现在可以使用“详细视图”处理任何模型。但我也希望显示对象的关系,无论是父对象还是子对象。假设您正在观看电视节目。我无法调用tvshow.seasure\u set.all()来显示此信息,因为我的模板不知道它正在处理一个tvshow(也不知道tvshow有seasures)。相反,我希望能够做到这一点:
object.children\u set.all()
这样,我就可以为这3个模型中的任何一个提供我的视图,而且它会起作用。这可能吗
p、 我知道这个物体。部分工作,但孩子们也会工作吗?我想出了一个难看的方法:使用relationship_name属性命名所有关系的子对象。我想这会奏效,但这不是我想走的方向
views.py:
from django.views.generic.detail import DetailView
class ObjectDetailView(DetailView):
template_name = "detail.html"
url.py
from tvshows.views import ObjectDetailView
from tvshows.models import Tvshow
urlpatterns = patterns('tvshows.views',
url(r'^(?P<pk>\d+)/$', ObjectDetailView.as_view(model = Tvshow), name='detail'),
)
从tvshows.views导入ObjectDetailView
从tvshows.models导入Tvshow
urlpatterns=patterns('tvshows.views',
url(r'^(?P\d+/$),ObjectDetailView.as_view(model=Tvshow),name='detail'),
)
不幸的是,没有办法做到这一点。但是,如果您的唯一目标是拥有一个适用于所有三个视图的视图,您可以执行以下操作:
class MyDetailView(DetailView):
...
def get_context_data(self, **kwargs):
context = super(MyDetailView, self).get_context_data(**kwargs)
if hasattr(context['object'], 'season_set'):
context['children'] = context['object'].season_set.all()
elif hasattr(context['object'], 'episode_set'):
context['children'] = context['object'].episode_set.all()
return context
谢谢你的帮助。这是可行的,糟糕的是,它总是像这样,因为那样我仍然需要在某处定义规则。这意味着它不是真正通用的。我想我将通过为每个模板创建一个不同的模板来解决这个问题,该模板将从一个通用的父级继承。