Django-tables2 - self.request 在渲染中
Django-tables2 - self.request in render
我试图根据请求的用户名更改 table 视图,但它一直返回 table 对象没有属性的 AttributeError 'request.' 我直接添加了对 table 的请求(请参阅下面的代码),但仍然无法完成。在我的 table class 中,我重写了 "get_top_pinned_data" 以根据用户名从数据库中获取数据。
views.py
class ListView(LoginRequiredMixin, ExportMixin, SingleTableView):
...
def get_context_data(self, **kwargs):
context = super(ListView, self).get_context_data(**kwargs)
table = self.get_table(**self.get_table_kwargs())
table.request = self.request # ADDING REQUEST DIRECTLY TO TABLE
context[self.context_filter_name] = self.filter
context['firstname'] = str(self.request.user.first_name)
return context
def get_table(self, **kwargs):
table_class = self.get_table_class()
table = table_class(data=self.get_table_data(), **kwargs)
return RequestConfig(self.request, paginate={'per_page':self.paginate_by}).configure(
table
)
tables.py
class Table(tables.Table):
...
def get_top_pinned_data(self):
id_list = MODEL.objects.filter(USERNAME=self.request.user.username).values_list('id', flat=True)
pinned = MODEL.objects.filter(id__in=id_list)
return pinned
谁能帮帮我?
**编辑:在 get_table 函数
中添加对 table 的请求
views.py
class ListView(LoginRequiredMixin, ExportMixin, SingleTableView):
...
def get_context_data(self, **kwargs):
context = super(ListView, self).get_context_data(**kwargs)
context[self.context_filter_name] = self.filter
context['firstname'] = str(self.request.user.first_name)
return context
def get_table(self, **kwargs):
table_class = self.get_table_class()
table = table_class(data=self.get_table_data(), **kwargs)
table.request = self.request
return RequestConfig(self.request, paginate={'per_page':self.paginate_by}).configure(
table
)
我发现把 table.request 放在 get_table 里面更干净,
def get_table(self, **kwargs):
"""
Return a table object to use. The table has automatic support for
sorting and pagination.
"""
table_class = self.get_table_class()
table = table_class(data=self.get_table_data(), **kwargs)
table.request = self.request
return RequestConfig(
self.request, paginate=self.get_table_pagination(table)
).configure(table)
如果您仍然遇到 AttributeError,请在 get_table 中设置之前使用请求,可能的解决方案如下:
def get_table(self, **kwargs):
"""
Return a table object to use. The table has automatic support for
sorting and pagination.
"""
table_class = self.get_table_class()
table = table_class(data=self.get_table_data(), request=self.request, **kwargs)
table.request = self.request
return RequestConfig(
self.request, paginate=self.get_table_pagination(table)
).configure(table)
并从您的表初始化方法中获取请求对象,例如:
class Table(tables.Table):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request")
super().__init__(*args, **kwargs)
def get_top_pinned_data(self):
id_list = MODEL.objects.filter(USERNAME=self.request.user.username).values_list('id', flat=True)
pinned = MODEL.objects.filter(id__in=id_list)
return pinned
我试图根据请求的用户名更改 table 视图,但它一直返回 table 对象没有属性的 AttributeError 'request.' 我直接添加了对 table 的请求(请参阅下面的代码),但仍然无法完成。在我的 table class 中,我重写了 "get_top_pinned_data" 以根据用户名从数据库中获取数据。
views.py
class ListView(LoginRequiredMixin, ExportMixin, SingleTableView):
...
def get_context_data(self, **kwargs):
context = super(ListView, self).get_context_data(**kwargs)
table = self.get_table(**self.get_table_kwargs())
table.request = self.request # ADDING REQUEST DIRECTLY TO TABLE
context[self.context_filter_name] = self.filter
context['firstname'] = str(self.request.user.first_name)
return context
def get_table(self, **kwargs):
table_class = self.get_table_class()
table = table_class(data=self.get_table_data(), **kwargs)
return RequestConfig(self.request, paginate={'per_page':self.paginate_by}).configure(
table
)
tables.py
class Table(tables.Table):
...
def get_top_pinned_data(self):
id_list = MODEL.objects.filter(USERNAME=self.request.user.username).values_list('id', flat=True)
pinned = MODEL.objects.filter(id__in=id_list)
return pinned
谁能帮帮我?
**编辑:在 get_table 函数
中添加对 table 的请求views.py
class ListView(LoginRequiredMixin, ExportMixin, SingleTableView):
...
def get_context_data(self, **kwargs):
context = super(ListView, self).get_context_data(**kwargs)
context[self.context_filter_name] = self.filter
context['firstname'] = str(self.request.user.first_name)
return context
def get_table(self, **kwargs):
table_class = self.get_table_class()
table = table_class(data=self.get_table_data(), **kwargs)
table.request = self.request
return RequestConfig(self.request, paginate={'per_page':self.paginate_by}).configure(
table
)
我发现把 table.request 放在 get_table 里面更干净,
def get_table(self, **kwargs):
"""
Return a table object to use. The table has automatic support for
sorting and pagination.
"""
table_class = self.get_table_class()
table = table_class(data=self.get_table_data(), **kwargs)
table.request = self.request
return RequestConfig(
self.request, paginate=self.get_table_pagination(table)
).configure(table)
如果您仍然遇到 AttributeError,请在 get_table 中设置之前使用请求,可能的解决方案如下:
def get_table(self, **kwargs):
"""
Return a table object to use. The table has automatic support for
sorting and pagination.
"""
table_class = self.get_table_class()
table = table_class(data=self.get_table_data(), request=self.request, **kwargs)
table.request = self.request
return RequestConfig(
self.request, paginate=self.get_table_pagination(table)
).configure(table)
并从您的表初始化方法中获取请求对象,例如:
class Table(tables.Table):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request")
super().__init__(*args, **kwargs)
def get_top_pinned_data(self):
id_list = MODEL.objects.filter(USERNAME=self.request.user.username).values_list('id', flat=True)
pinned = MODEL.objects.filter(id__in=id_list)
return pinned