未指定 base_name 参数,并且无法从视图集中自动确定名称,因为它没有 .queryset 属性

Posted

技术标签:

【中文标题】未指定 base_name 参数,并且无法从视图集中自动确定名称,因为它没有 .queryset 属性【英文标题】:base_name argument not specified, and could not automatically determine the name from the viewset, as it does not have a .queryset attribute 【发布时间】:2018-07-10 22:39:40 【问题描述】:

问题是这样的: 我正在尝试替换 标准查询集

queryset: MyModel.objects.all()

在我的:

def get_queryset(self, username=None):
    if username is not None:
        user = UserModel.objects.get(username=username)
        queryset = MyModel.filter(author=user)
        return queryset
    else:
        queryset = MyModel.objects.all()
        return queryset

当我删除“queryset”,只留下“get_queryset”时,出现错误:

AssertionError: base_name 参数未指定,并且无法从视图集中自动确定名称,因为它没有 .queryset 属性。

整体看起来是这样的:

class MyModelView(viewsets.ModelViewSet):

permissions_classes = (permissions.IsAuthenticated,)
serializer_class = MyModelleSerializer

def get_queryset(self, username=None):
    if username is not None:
        user = UserModel.objects.get(username=username)
        queryset = MyModel.filter(author=user)
        return queryset
    else:
        queryset = MyModel.objects.all()
        return queryset

lookup_field = 'username'
lookup_value_regex = '[a-zA-Z0-9$&(._)\-]+'

那么如何正确覆盖方法?

【问题讨论】:

如果您像我一样决定手动输入 github 上示例中的 urls.py 代码,您也会收到此错误;我不小心将 UserViewSet 写为字符串('UserViewSet'),而不是引用在同一文件中定义的对象,如下面的 Rahmonov 所述。 【参考方案1】:

在最新的 DRF 中,如果您没有定义 queryset,则需要在您的视图集 url 中显式设置 base_name

所以,这样的事情应该会很好:

router.register(r'my-model/', MyModelView, basename='MyModel')

看到这个:docs 希望对您有所帮助。

【讨论】:

【参考方案2】:

您必须在 url.py 文件中为 register 方法添加一个名为 basename 的参数,如 url.py 中的以下代码:

"In url.py"
    
    
...
    
from rest_framework import routers
       
router = routers.DefaultRouter()
router.register(r'my-model/' , MyModelView , basename='MyModel')  
urlpattern=[...]     

【讨论】:

“basename”不是“base_name”【参考方案3】:

您需要在您的 url conf 中设置 basename 属性。 Docs here

【讨论】:

以上是关于未指定 base_name 参数,并且无法从视图集中自动确定名称,因为它没有 .queryset 属性的主要内容,如果未能解决你的问题,请参考以下文章

`basename` 参数未指定,并且可以'\

路由Router

无法配置数据源:未指定“url”属性并且无法配置嵌入式数据源。春天

无法配置数据源:未指定“url”属性,并且无法配置嵌入式数据源。原因:发

Spring:无法配置数据源:未指定“url”属性,并且无法配置嵌入式数据源[关闭]

纹理图集中的纹理未加载或出现