При настройке viewset я получил ошибку AttributeError: у объекта 'function' нет атрибута 'get_extra_actions' - PullRequest
0 голосов
/ 25 сентября 2018

Я изучаю 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 routs = 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'

По моему мнению, это то, что я должен написать get_extra_actions метод в QuestionView классе, если так, как я пишу это?как это?

def get_extra_actions() : 
    return  ???

Если нет, в чем проблема?

[Редактировать]

, когда я стираю .as_view () вurl part и напишите как 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 возвращает check.run_checks (** kwargs) FiФайл "C: \ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ check \ registry.py", строка 73, в файле run_checks new_errors = check (app_configs = app_configs)"C: \ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ check \ urls.py", строка 13, в check_url_config, возвращать файл check_resolver (resolver), "C: \Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ check \ 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 \ functions.py ", строка 36, в get res = instance. dict [self.name] = self.func (экземпляр) Файл "C: \ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ urls \ resolvers.py", строка 536, в шаблонах url_patterns = getattr (self.urlconf_module, "urlpatterns", self.urlconf_module) Файл "C: \ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ utils \ functions.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 возвращает файл import_module (self.urlconf_name)" C: \ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ importlib__init__.py ", строка 126, в файле import_moduleвернуть _bootstrap._gcd_import (имя [уровень:], пакет, уровень) Файл "", строка 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 возвращает _bootstrap._gcd_import (имя [уровень:], пакет, уровень) Файл "", строка 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'), File "C: \ Users \ 1Sun \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ rest_framework \ viewsets.py ", строка 68, в as_view повысить TypeError (" Аргумент actions должен быть указан, когда "TypeError: Аргумент actions должен быть предоставлен при вызове .as_view() в ViewSet.Например .as_view({'get': 'list'})

1 Ответ

0 голосов
/ 25 сентября 2018

Вам не нужно использовать метод .as_view() при регистрации набора в маршрутизаторах

Таким образом, он должен быть

router.register('question', <b>cebula_views.QuestionView</b>, 'userpage-question')
вместо
router.register('question', cebula_views.QuestionView.as_view({
    'get':'list',

}), 'userpage-question')
...