Получить кверисет из другого CBV
У меня есть два CBV: один - основной вид, который используется для отображения набора запросов, второй - вид, который используется только для обработки данных для экспорта в файл; он только возвращает файл для загрузки. Я пытаюсь добиться того, чтобы получить доступ к набору запросов из основного представления в представлении обработки. Вот мой пример:
Главный вид:
class EmployeesView(LoginRequiredMixin, FilterView):
template_name = 'Employee/employees.html'
model = Employee
filterset_class = EmployeesFilter
def get_queryset(self):
order_by = 'emp_name'
if self.request.GET.get('sort'):
order_by = self.request.GET.get('sort')
# Get URL parameter from dashboard and show results according to that.
if self.kwargs and self.kwargs['ref']:
...
query_set = Employee.objects.filter(visa_status='Pending Processing').order_by(order_by)
else:
query_set = Employee.objects.all().order_by(order_by)
filter = self.filterset_class(self.request.GET, query_set)
return filter.qs
Вид обработки:
class ExportEmployeesData(LoginRequiredMixin, TemplateView):
def get(self, request, *args, **kwargs):
emp_view = EmployeesView()
employees = emp_view.get_queryset()
....
....
response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', )
response['Content-Disposition'] = 'attachment; filename={date}-employees_data.xlsx'.format(
date=datetime.now().strftime('%d-%m-%Y, %H-%M-%S-%p'),
)
return response
Проблема в том, что всякий раз, когда к EmpoyeesView's get_queryset() обращаются из ExportEmployeesData, я получаю ошибку, говорящую 'EmployeesView' object has no attribute 'request'. Вот полный отслеживание:
Traceback (most recent call last):
File "F:\Projects\HR_EmployeeDB\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "F:\Projects\HR_EmployeeDB\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "F:\Projects\HR_EmployeeDB\venv\lib\site-packages\django\views\generic\base.py", line 69, in view
return self.dispatch(request, *args, **kwargs)
File "F:\Projects\HR_EmployeeDB\venv\lib\site-packages\django\contrib\auth\mixins.py", line 71, in dispatch
return super().dispatch(request, *args, **kwargs)
File "F:\Projects\HR_EmployeeDB\venv\lib\site-packages\django\views\generic\base.py", line 101, in dispatch
return handler(request, *args, **kwargs)
File "F:\Projects\HR_EmployeeDB\Employee\views.py", line 598, in get
employees = emp_view.get_queryset()
File "F:\Projects\HR_EmployeeDB\Employee\views.py", line 55, in get_queryset
if self.request.GET.get('sort'):
File "F:\Projects\HR_EmployeeDB\venv\lib\site-packages\django_filters\utils.py", line 58, in __getattr__
return super(new_class, self).__getattr__(name)
File "F:\Projects\HR_EmployeeDB\venv\lib\site-packages\django_filters\utils.py", line 58, in __getattr__
return super(new_class, self).__getattr__(name)
File "F:\Projects\HR_EmployeeDB\venv\lib\site-packages\django_filters\utils.py", line 58, in __getattr__
return super(new_class, self).__getattr__(name)
File "F:\Projects\HR_EmployeeDB\venv\lib\site-packages\django_filters\utils.py", line 59, in __getattr__
return self.__getattribute__(name)
AttributeError: 'EmployeesView' object has no attribute 'request'
[13/Mar/2022 12:09:34] "GET /employees/export_employees_data/new_employees_list_export HTTP/1.1" 500 102591
Есть ли способ передать эти request объекты также при вызове функции? Или есть ли способ получить доступ к текущему набору запросов, который был выполнен для отображения на той же странице, без удаления условий self.request и self.kwargs?