簡體   English   中英

在設置視圖集時,出現錯誤 AttributeError: 'function' object has no attribute 'get_extra_actions'

[英]In setting viewset, I got an error AttributeError: 'function' object has no attribute 'get_extra_actions'

我正在學習 DRF,現在有點困惑。
我像這樣設置QuestionViewQuestionSerializer

視圖.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)

序列化程序.py

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

網址.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 行,在 urls 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-包\\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  ???

如果不是,問題是什么?

[編輯]

當我在 url 部分擦除 .as_view() 並像router.register('question', cebula_views.QuestionView, 'userpage-question')

錯誤是

由 .wrapper 在 0x00000283172D3D08 處啟動的線程中的未處理異常> Traceback(最近一次調用最后一次):文件“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) File "C:\\Users\\1Sun\\AppData\\Local \\Programs\\Python\\Python36\\lib\\site-packages\\django\\core\\checks\\urls.py”,第 13 行,在 check_url_config 中返回 check_resolver(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\\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”,第 529 行,在 urlconf_module return import_module(self.urlconf_name) File "C:\\Users\\1Sun\\AppData\\Local\\Programs\\Python\\Python36\\lib\\importlib__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:] , package, level) File "", line 994, in _gcd_import File "", line 971, in _find_and_load File "", line 955, in _find_and_load_unlocked File "", line 665, in _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、在include urlconf_module = import_module(urlconf_module)文件“C:\\Users\\1Sun\\AppData\\Local\\Programs\\Python\\Python36\\lib\\importlib__init__.py”,第126行,在import_module return _bootstrap._gcd_import(name[level: ], package, level) File "", line 994, in _gcd_import File "", line 971, in _find_and_load File "", line 955, in _find_and_load_unlocked File "", line 665, in _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 行, in as_view raise TypeError("The actions argument must be provided when " TypeError: The actions argument must be provided when call .as_view() on a ViewSet. For example .as_view({'get': 'list'})

我不確定為什么,但我也無法使用路由器創建路由(使用 .as_view())。 但是,當我嘗試直接在 urlpatterns 中創建路由時,它對我有用。

所以,它會是這樣的:

urlpatterns = [
    path('question', cebula_views.QuestionView.as_view({
         'get':'list',
         }), 'userpage-question'),
]

希望對你有幫助!

路由器中注冊視圖集時不必使用.as_view()方法

所以,應該是

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

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

使用此 URL 格式。

    from django.urls import path
    from rest_framework.urlpatterns import format_suffix_patterns
    from .views import QuestionView

    urlpatterns = [
     path('QuestionView/', QuestionView),
    ]

    urlpatterns = format_suffix_patterns(urlpatterns)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM