【问题标题】:Combine DetailView and SingleTableView in Django在 Django 中结合 DetailView 和 SingleTableView
【发布时间】:2020-12-17 08:51:45
【问题描述】:

如何在 django 中显示 SingleTableView 表和 DetailView?我想要的是将两者包含或结合为一个。这样当调用 DeviceDetailView 时,我会收到设备的详细信息和设备数据表(也存储在另一个模型中)。

我正在使用 django-tables2 作为表格。

有人知道吗?

谢谢

class DataListView(SingleTableView):
    model = Data
    template_name = 'data/list.html'
    table_class = DataTable

    def post(self, request, *args, **kwargs):

        queryset = request.POST

        for i in queryset['list'].split(","):

            if queryset['action'] == 'delete':
                Data.objects.filter(data_id=i).delete()


        return HttpResponseRedirect('/data/')


class DeviceDetailView(DetailView):
    template_name = 'devices/detail.html'

    def get_object(self):
        id_ = self.kwargs.get("id")
        return get_object_or_404(Device, id=id_)

编辑 我知道它应该看起来像这样:

class DeviceDetailView(SingleTableView, DetailView):
    template_name = "devices/device-detail.html"
    model = Device
    table_class = DeviceTable

    def get_context_data(self, **kwargs):
        self.object = self.get_object()
        context = super(DetailView, self).get_context_data(**kwargs)
        id_ = self.kwargs.get("id")
        obj = Device.objects.filter(id=id_)
        context['object'] = obj
        return context

但我想我仍然不知道如何在 get_context_data 中执行此部分,以便将元素合并在一起......

解决方案

好的,它是这样的:

class DeviceDetailView(SingleTableView, DetailView):
    template_name = 'devices/device-detail.html'
    model = Data
    table_class = DataTable
    #crumbs = [('Device detail', 'DeviceDetailView')]

    def get_context_data(self, **kwargs):
        self.object = self.get_object()
        context = super(DetailView, self).get_context_data(**kwargs)
        table = self.get_table(**self.get_table_kwargs())
        context[self.get_context_table_name(table)] = table
        return context

    def get_object(self):
        id_ = self.kwargs.get("id")
        return get_object_or_404(Device, id=id_)

【问题讨论】:

    标签: django django-views django-tables2


    【解决方案1】:

    您可以使用自定义get_context_data 在您的DetailsView 中提供餐桌服务。您可以像通常使用{% render_table table %} 一样在模板中呈现您的表格。

    # import YourModel
    # import YourTable
    
    class DeviceDetailView(DetailView):
        model = YourModel
        template_name = 'devices/detail.html'
    
        def get_context_data(self, **kwargs):
            table = YourTable(YourModel.objects.all()) # define your tables data here
            context = {"table": table}
            return super().get_context_data(**context)
    

    【讨论】:

    • 感谢 marco 的回答,但 SingleTableView 类放在哪里?
    • 由于您想在一个视图中同时显示(详细信息和表格),因此无需定义两个视图。要么在 DetailView 中合并表格(提到的解决方案),要么在 SingleTableView 中发送详细数据。
    猜你喜欢
    • 2013-05-31
    • 2017-05-08
    • 2013-05-19
    • 2014-01-14
    • 2020-03-06
    • 1970-01-01
    • 2017-05-17
    • 2019-03-04
    相关资源
    最近更新 更多