我正在学习DRF并且现在感到困惑 .
我像这样设置了 QuestionView
和 QuestionSerializer
.
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 回答
在路由器中注册视图集时,不必使用 .as_view() 方法
所以,它应该是
而不是