首页 文章

在设置视图集时,我收到错误AttributeError:'function' object没有属性'get_extra_actions'

提问于
浏览
1

我正在学习DRF并且现在感到困惑 .
我像这样设置了 QuestionViewQuestionSerializer .

views.py

class QuestionView(viewsets.ModelViewSet) :
    queryset = models.Question.objects.all()
    serializer_class = QuestionSerializer

    def list(self, request, *args, **kwargs):
        serializer = QuestionSerializer(models.Question.objects.all())
        return Response(serializer.data)

serializer.py

class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model= Question
        fields= ("question_text", "owner", "pub_date")

urls.py

router = routers.DefaultRouter()
router.register('profile', cebula_views.SettingView)
router.register('question', cebula_views.QuestionView.as_view({
    'get':'list',

}), 'userpage-question')

urlpatterns = [
    ...
    url(r'^', include(router.urls)),
    ...
]

文件“C:\ Users \ 1Sun \ Cebula3 \ businessproject \ urls.py”,第34行,在url(r'^',include(router.urls)),文件“C:\ Users \ 1Sun \ AppData \ Local” \ Programs \ Python \ Python36 \ lib \ site-packages \ rest_framework \ routers.py“,第101行,在url中self._urls = self.get_urls()文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ rest_framework \ routers.py“,第363行,在get_urls urls = super(DefaultRouter,self).get_urls()文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ rest_framework \ routers.py“,第261行,在get_urls routes = self.get_routes(viewset)文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site -packages \ rest_framework \ routers.py“,第176行,在get_routes中extra_actions = viewset.get_extra_actions()AttributeError:'function'对象没有属性'get_extra_actions'

在我看来,我应该在 QuestionView 类中编写 get_extra_actions 方法,如果是这样,我怎么写呢?像这样?

def get_extra_actions() : 
    return  ???

如果没有,问题是什么?

[Edit]

当我在url部分擦除.as_view()并写成 router.register('question', cebula_views.QuestionView, 'userpage-question')

错误是

.wrapper在0x00000283172D3D08启动的线程中的未处理异常>回溯(最近一次调用最后一次):文件“C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ utils \ autoreload .py“,第225行,在包装器fn(* args,** kwargs)文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ management \ commands \ runserver.py“,第120行,在inner_run中self.check(display_num_errors = True)文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ management \ base.py“,第364行,检查include_deployment_checks = include_deployment_checks,文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ management \ base.py“,第351行,在_run_checks中返回checks.run_checks(** kwargs)文件“C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ checks \ registry.py”,第73行,在run_checks中new_errors = check(app_configs = app_configs)文件“C:\ Users \ 1Sun \ AppData \ Loc al \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ checks \ urls.py“,第13行,在check_url_config中返回check_resolver(解析程序)文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ checks \ urls.py“,第23行,在check_resolver中返回check_method()文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ urls \ resolvers.py“,第397行,检查self.url_patterns中的模式:文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ utils \ functional.py“,第36行,在get res = instance.dict [self.name] = self.func(instance)文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ urls \ resolvers.py“,第536行,在url_patterns patterns = getattr(self.urlconf_module,”urlpatterns“,self.urlconf_module)文件”C:\ Users \ 1Sun \ AppData \ Local \程序\ Python \ Python36 \ lib \ site-packages \ django \ utils \ functional.py“,第36行,在get res = instance.dict [self.name] = self.func(instan ce)文件“C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ urls \ resolvers.py”,第529行,在urlconf_module中返回import_module(self.urlconf_name)文件“ C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ importlib__init __ . py“,第126行,在import_module中返回_bootstrap._gcd_import(name [level:],package,level)文件”“,第994行,在_gcd_import文件“”,第971行,在_find_and_load文件“”,第955行,在_find_and_load_unlocked文件“”,第665行,在_load_unlocked文件“”,第678行,在exec_module文件“”,第219行,在_call_with_frames_removed文件中“ C:\ Users \ 1Sun \ Cebula3 \ businessproject \ urls.py“,第31行,在url(r'^ cebula /',include('cebula.urls',namespace ='cebula')),文件”C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ urls \ conf.py“,第34行,包含urlconf_module = import_module(urlconf_module)文件”C:\ Users \ 1Sun \ AppData \ local \ Programs \ Python \ Python36 \ lib \ importlib__init __ . py“,第126行,在import_module中返回_bo otstrap._gcd_import(name [level:],package,level)文件“”,第994行,在_gcd_import文件“”,第971行,在_find_and_load文件“”中,行955,在_find_and_load_unlocked文件“”,第665行,在_load_unlocked文件“”,第678行,在exec_module文件“”,第219行,在_call_with_frames_removed文件“C:\ Users \ 1Sun \ Cebula3 \ cebula \ urls.py”中,行15,在url(r'^ question / $',views.QuestionView.as_view(),name ='question'),文件“C:\ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site -packages \ rest_framework \ viewsets.py“,第68行,在as_view中引发TypeError(”当“TypeError:在ViewSet上调用.as_view()时必须提供actions参数时,必须提供actions参数 . 例如.as_view( {'get':'list'})

1 回答

  • 0

    在路由器中注册视图集时,不必使用 .as_view() 方法

    所以,它应该是

    router.register('question', cebula_views.QuestionView, 'userpage-question')
    

    而不是

    router.register('question', cebula_views.QuestionView.as_view({
        'get':'list',
    
    }), 'userpage-question')
    

相关问题