将 get_context_data 方法添加到基于 class 的视图会破坏 django-tables2
Adding get_context_data method to a class based view breaks django-tables2
我有一个基于 class 的视图,我用它来获取查询集并传递给呈现结果的 django-tables2。这方面一切正常。我正在尝试将记录实例从不同的查询集传递到模板,因此我可以在 table django-tables2 生成的上方显示信息。
经搜索,似乎 'right' 方法是通过 get_context_data
方法。但是,当我尝试将此方法添加到我的视图时,只需获取查询集并返回它,它就会产生错误 Expected table or queryset, not str
。我将此归因于模板中的 {% render_table table %}
。没有它,我可以按预期访问我的 'team' 对象。
为什么会这样?在我添加我的 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}
你好像忘了调用 super() 方法
class myteam(LoginRequiredMixin, SingleTableView):
# Rest of the code
def get_context_data(self):
<b>context = super().get_context_data()</b>
context["team"] = Team.objects.get(
id=self.request.user.contestant.assigned_team.id
)
return context
我有一个基于 class 的视图,我用它来获取查询集并传递给呈现结果的 django-tables2。这方面一切正常。我正在尝试将记录实例从不同的查询集传递到模板,因此我可以在 table django-tables2 生成的上方显示信息。
经搜索,似乎 'right' 方法是通过 get_context_data
方法。但是,当我尝试将此方法添加到我的视图时,只需获取查询集并返回它,它就会产生错误 Expected table or queryset, not str
。我将此归因于模板中的 {% render_table table %}
。没有它,我可以按预期访问我的 'team' 对象。
为什么会这样?在我添加我的 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}
你好像忘了调用 super() 方法
class myteam(LoginRequiredMixin, SingleTableView):
# Rest of the code
def get_context_data(self):
<b>context = super().get_context_data()</b>
context["team"] = Team.objects.get(
id=self.request.user.contestant.assigned_team.id
)
return context