Django Rest Framework 'Manager' 对象不可订阅
Django Rest Framework 'Manager' object is not subscriptable
我正在使用自定义查询集作为我的模型的管理器。
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)
(假期应用程序具有非常标准的假期模型序列化程序和视图集)。
当我尝试获取 /vacation/
终点时发生错误。 (DRF 可浏览 API 尝试呈现员工字段的选择。)
一切正常,但有 a check in django-rest-framework (relations.py)。此检查对我的模型失败。实际上他们正在根据 Manager
class 检查类型,但我的经理是 BaseManager
类型(正如预期的那样)而不是 Manager
.
这会通过返回管理器而不是查询集来触发错误。有什么办法可以让我这边的支票为真吗? (从 Manager
继承不是一个选择)虽然我认为这应该用 DRF 中的 PR 更新。
回溯
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
您可能使用的是 ModelManager
而不是 Queryset
示例:
Employee.objects
==> Employee.objects.all()
Django 文档建议管理器继承自 models.Manager
DRF 也是如此。
您可能会对 Django documentation 命名 BaseManager
感到困惑,这 不是 models.BaseManager
而是继承自 [=] 的基本管理器10=].
我正在使用自定义查询集作为我的模型的管理器。
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)
(假期应用程序具有非常标准的假期模型序列化程序和视图集)。
当我尝试获取 /vacation/
终点时发生错误。 (DRF 可浏览 API 尝试呈现员工字段的选择。)
一切正常,但有 a check in django-rest-framework (relations.py)。此检查对我的模型失败。实际上他们正在根据 Manager
class 检查类型,但我的经理是 BaseManager
类型(正如预期的那样)而不是 Manager
.
这会通过返回管理器而不是查询集来触发错误。有什么办法可以让我这边的支票为真吗? (从 Manager
继承不是一个选择)虽然我认为这应该用 DRF 中的 PR 更新。
回溯
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
您可能使用的是 ModelManager
而不是 Queryset
示例:
Employee.objects
==> Employee.objects.all()
Django 文档建议管理器继承自 models.Manager
DRF 也是如此。
您可能会对 Django documentation 命名 BaseManager
感到困惑,这 不是 models.BaseManager
而是继承自 [=] 的基本管理器10=].