gpt4 book ai didi

python - "AssertionError: Cannot apply DjangoModelPermissions"即使在 View 中定义了 get_queryset

转载 作者:行者123 更新时间:2023-12-03 17:39:45 34 4
gpt4 key购买 nike

我收到以下错误 即使我的观点是压倒一切的 get_queryset() .

AssertionError: Cannot apply DjangoModelPermissions on a view that does not set `.queryset` or have a `.get_queryset()` method.

这是我的观点:
class PlayerViewSet(viewsets.ModelViewSet):

serializer_class = PlayerSerializer

def get_queryset(self):
try:
quality = self.kwargs['quality'].lower()
print("Getting Player for %s"%quality)
return Player.objects.filter(qualities__contains=quality)
except:
# todo: send out a 404
print("No Players found for this quality :(")
pass

我的设置.py:
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
]
}

编辑 - 附加信息:这是 urls.py 中的条目:
router = routers.DefaultRouter()
router.register(r'^player-list/(?P<quality>\w+)', players.views.PlayerViewSet, base_name="Player List")
[...]
urlpatterns = [
url(r'^api/', include(router.urls)),
]

我不明白这是什么问题。为什么 DRF 看不到我的 get_queryset方法?

最佳答案

我已经尝试在 DRF 3.3.2 上运行您的代码,并且可以找出几个容易错过的错误,这些错误可能会导致您提到的 AssertionError。

  • 拼写错误 get_queryset() .在这里您的问题看起来不错,但请仔细检查您的代码以确保。
  • 在您的代码中 get_queryset ,您返回 None在异常的情况下。我尝试在 get_queryset 下强制异常并按照您所做的方式使其静音(最后返回 None )。这会导致确切的 AssertionError。因此,请确保您的代码位于 get_queryset 下没有提出任何异常(exception)。我认为可能会引发异常的一个方面是命名的 url 组“质量”未传递到 self.kwargs .

  • 旁注:当 DRF 调用权限类' has_permission方法,它将 api View 作为参数发送。然后它使用 api View 来确定您的查询集是什么。如果您可以在“rest_framework/permissions.py”( here )中设置调试器并在 has_permission 中暂停方法,然后您可以仔细检查 queryset变量被正确拾取,或设置为无。在您的情况下,它可能会显示为 None,这是触发 AssertionError 的原因,然后您可以检查 api_view instance作为参数传递给函数,实际上是指 PlayerViewSet的一个实例或不。

    关于python - "AssertionError: Cannot apply DjangoModelPermissions"即使在 View 中定义了 get_queryset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39322708/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com