多个模型通用ListView到模板

时间:2015-06-30 09:05:32

标签: django django-views

将2个模型列入通用IndexView的SIMPLEST方法是什么?我的两个模型是CharacterSeriesCharacterUniverse

我的views.py

    from .models import CharacterSeries, CharacterUniverse


    class IndexView(generic.ListView):
        template_name = 'character/index.html'
        context_object_name = 'character_series_list'

        def get_queryset(self):
            return CharacterSeries.objects.order_by('name')


    class IndexView(generic.ListView):
        template_name = 'character/index.html'
        context_object_name = 'character_universe_list'

        def get_queryset(self):
            return CharacterUniverse.objects.order_by('name')

我需要知道最短和最优雅的代码。看了很多,但不想使用mixins。我可能没有指出正确的方向。

谢谢大家。

2 个答案:

答案 0 :(得分:13)

您可以像这样在ListView上传递一个查询集作为上下文,

class IndexView(generic.ListView):
    template_name = 'character/index.html'
    context_object_name = 'character_series_list'
    model = CharacterSeries

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context.update({
            'character_universe_list': CharacterUniverse.objects.order_by('name'),
            'more_context': Model.objects.all(),
        })
        return context

    def get_queryset(self):
        return CharacterSeries.objects.order_by('name')

答案 1 :(得分:5)

https://docs.djangoproject.com/en/1.8/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin.get_context_data

听起来像mixin是唯一的(右)?办法。我添加了一个class IndexView(generic.ListView): template_name = 'character/index.html' context_object_name = 'character_series_list' def get_queryset(self): return CharacterSeries.objects.order_by('name') def get_context_data(self, **kwargs): context = super(IndexView, self).get_context_data(**kwargs) context['character_universe_list'] = CharacterUniverse.objects.order_by('name') return context 方法,现在它可以工作了。

快速提问如何添加2个以上的型号..

下面现在使用2个模型:

{{1}}