Я использую пользовательский Queryset в качестве менеджера для моей модели.
class EmployeeQuerySet(QuerySet):
def update(self, **kwargs):
# some checks
super().update(**kwargs)
class EmployeeManager(BaseManager.from_queryset(EmployeeQuerySet)):
pass
class Employee(models.Model):
objects = EmployeeManager
(В некоторых других приложениях, связанных с отпуском)
class Vacation(models.Model):
employee = models.ForeignKey(Employee)
(Приложение для отпуска довольно застойноеСериализатор и ViewSet для отпускной модели).
Ошибка возникает при попытке получить конечную точку /vacation/
.(Браузерный API-интерфейс DRF пытается отобразить варианты для поля сотрудника.)
Все работает, как и ожидалось, но проверка в django-rest-framework (relations.py) .Эта проверка не удалась для моей модели.На самом деле они проверяют тип по классу Manager
, но мой менеджер имеет тип BaseManager
(как и ожидалось), а не Manager
.
Это вызывает ошибку, возвращая менеджер вместо набора запросов.Есть ли способ сделать эту проверку правдивой с моей стороны?(наследование от Manager
не является выбором), хотя я думаю, что это должно быть обновлено с PR в DRF.
Traceback
File "/home/nafees/.venvs/shift/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "/home/nafees/.venvs/shift/lib/python3.7/site-packages/django/template/defaulttags.py", line 161, in render
values = self.sequence.resolve(context, ignore_failures=True)
File "/home/nafees/.venvs/shift/lib/python3.7/site-packages/django/template/base.py", line 671, in resolve
obj = self.var.resolve(context)
File "/home/nafees/.venvs/shift/lib/python3.7/site-packages/django/template/base.py", line 796, in resolve
value = self._resolve_lookup(context)
File "/home/nafees/.venvs/shift/lib/python3.7/site-packages/django/template/base.py", line 858, in _resolve_lookup
current = current()
File "/home/nafees/.venvs/shift/lib/python3.7/site-packages/rest_framework/relations.py", line 222, in iter_options
self.get_choices(cutoff=self.html_cutoff),
File "/home/nafees/.venvs/shift/lib/python3.7/site-packages/rest_framework/relations.py", line 202, in get_choices
queryset = queryset[:cutoff]
TypeError: 'EmployeeManager' object is not subscriptable