【问题标题】:AssertionError: `base_name` argument not specifiedAssertionError:未指定`base_name`参数
【发布时间】:2018-08-15 20:42:00
【问题描述】:

我正在尝试将模型的参数添加到 URL 模式中,例如:

http://111.111.11.111:8080/resultados/image.jpg

其中nome_ficheiro = image.jpg(nome_ficheiro 是模型参数,见下文)

但我收到以下错误:

 File "/usr/local/lib/python2.7/dist-packages/rest_framework/routers.py", line 139, in get_default_base_name
    assert queryset is not None, '`base_name` argument not specified, and could ' \
AssertionError: `base_name` argument not specified, and could not automatically determine the name from the viewset, as it does not have a `.queryset` attribute.

网址格式:

    router = routers.DefaultRouter()
    urlpatterns = [url(r'^', include(router.urls))]
    router.register(r'resultados/(?P<nome_ficheiro>.+)/$',resultUploadView.as_view({'get': 'get_queryset'}))

观点:

class resultUploadView(generics.ListAPIView):
    serializer_class = resultSerializer
    def get_queryset(self):
        nome = self.kwargs['nome_ficheiro']
        return labelResult.objects.filter(nome_ficheiro=nome)

型号:

 class labelResult(models.Model):
    nome_ficheiro   = models.CharField(max_length=120)
    especie         = models.CharField(max_length=120)
    zona            = models.CharField(max_length=120)
    data            = models.CharField(max_length=120)

使用:Python 2.7.12 和 DRF 3.6.3

编辑:

urls.py:

router.register(r'results/(?P<nome_ficheiro>.+)/$', resultUploadView.as_view({'get': 'get_queryset'}), base_name='img_name')

还是不行,报同样的错误

【问题讨论】:

    标签: python django django-rest-framework django-views


    【解决方案1】:

    您可以在添加时命名路线:

    router.register(
        r'the-url_pattern$',
        TheViewSet,
        base_name='put-something-here',
    )
    

    顺便说一句,同时指定queryset 类属性和get_queryset 方法很奇怪,这可能是混淆DRF 的原因。选择一种方式或另一种方式。

    【讨论】:

    • 删除了 qeryset 并添加了 base_name:router.register(r'results/(?P.+)/$', resultUploadView.as_view({'get': ' get_queryset'}), base_name='img_name') 但我一直收到同样的错误..
    • 我想我看到了另一个问题,router.register 需要 ViewSet,但你正在传递一个视图。通常路由器与视图集一起使用,视图只是作为 url 实例直接添加到 urlpatterns。因此,您应该更改视图代码以使用视图集,或者保持视图原样而不使用路由器。
    【解决方案2】:

    将“base_name”替换为“basename”

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 2021-02-23
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多