我可以使用混入结合创建和列表类的泛型视图吗?

3 投票
1 回答
1804 浏览
提问于 2025-04-17 03:19

我在寻找一种最简单的方法,把列表和创建功能结合在一起,使用通用类视图。
我想要一个页面,上面有一个物品列表,下面有一个表单可以添加新物品。

我觉得使用混合类架构可以把需要的类组合在一起,但到现在为止还没成功。

这个几乎可以工作:

class ResourceListView(ListView, BaseCreateView):
    context_object_name = 'resources'
    model = Resource
    form_class = ResourceForm

但是在模板里面无法访问到 form,而且在输出不正确的时候会崩溃(当表单有效时就没问题)。
这可能和多重继承有关,但我对Python还不太熟悉,所以有点搞不清楚。

有没有简单的方法可以把一些混合类结合成一个视图和创建视图,还是说我得自己写一个?

1 个回答

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

这个方法在创建和列出数据时都能正常工作(虽然可能会多发一些数据库请求,但我不太确定)。

撰写回答