【问题标题】:Adding get_context_data method to a class based view breaks django-tables2将 get_context_data 方法添加到基于类的视图会破坏 django-tables2
【发布时间】:2020-11-29 04:44:56
【问题描述】:

我有一个基于类的视图,用于获取查询集并传递给 django-tables2 以呈现结果。这方面一切正常。我正在尝试将来自不同查询集的记录实例传递给模板,因此我可以在 django-tables2 生成的表上方显示信息。

在搜索时,似乎“正确”的方法是通过get_context_data 方法。但是,当我尝试将此方法添加到我的视图中时,只需获取查询集并返回它,就会产生错误Expected table or queryset, not str。我将其隔离为由于我的模板中的{% render_table table %}。没有它,我可以按预期访问我的“团队”对象。

为什么会这样?在我添加我的 get_context_data 方法之前,qs 查询集被很好地传递给了 django-tables2。 qs 查询集是否也必须通过 get_context_data 返回?如果有,为什么?

这是我的尝试:

class myteam(LoginRequiredMixin, SingleTableView):
    def get_queryset(self):
        qs = Contestant.objects.filter(assigned_team=self.request.user.contestant.assigned_team)
        qs = qs.exclude(id=self.request.user.contestant.id)
        return qs
    
    def get_template_names(self):
        return 'xgames/viewteam.html'

    def get_table_class(self):
        return TeamsTable 
        
    def get_context_data(self):
        team = Team.objects.get(id=self.request.user.contestant.assigned_team.id)
        return {"team": team}

【问题讨论】:

    标签: django django-views django-templates django-tables2


    【解决方案1】:

    好像你忘了调用 super() 方法

    class myteam(LoginRequiredMixin, SingleTableView):
        # Rest of the code
    
        def get_context_data(self):
            context = super().get_context_data()
            context["team"] = Team.objects.get(
                id=self.request.user.contestant.assigned_team.id
            )
            return context

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2013-04-15
      • 2021-03-27
      • 2011-07-29
      • 2019-04-04
      相关资源
      最近更新 更多