我可以使用混合来组合基于创建和列表类的通用视图吗?

Dan*_*mov 3 python django django-generic-views django-class-based-views django-1.3

我正在寻找在功能上将 List 和 Create 与通用类视图相结合的最简单方法。
我想要一个页面,其中包含一个项目列表和一个用于在底部添加新项目的表单。

我认为 mixin 架构将允许组合必要的类,但我还没有运气。

这几乎有效:

class ResourceListView(ListView, BaseCreateView):
    context_object_name = 'resources'
    model = Resource
    form_class = ResourceForm
Run Code Online (Sandbox Code Playgroud)

form不能在模板内部访问,并且在无效输出时崩溃(当表单有效时,这很好)。
这可能与多重继承有关,但我还没有真正进入 Python,所以它变得太混乱了。

有没有一种简单的方法可以将一些mixin 组合成一个视图并创建视图,还是我必须推出自己的视图?

Dan*_*mov 6

注意:我不再提倡这种解决方案,因为是一个更干净的解决方案。

通过反复试验(并查看 Django 源代码),我写了这个:

class ListCreateView(ListView, BaseCreateView):
    def get_context_data(self, **kwargs):
        self.object = None
        self.object_list = self.get_queryset()

        form_class = self.get_form_class()
        form = self.get_form(form_class)

        kwargs.update({'object_list': self.object_list, 'form': form})

        context = super(ListCreateView, self).get_context_data(**kwargs)
        return context
Run Code Online (Sandbox Code Playgroud)

创建和列出都可以正常工作(尽管它可能会发出一些额外的数据库调用,但不确定)。