AttributeError: тип объекта «DirectView» не имеет атрибута «as_view» - PullRequest
0 голосов
/ 11 декабря 2018

вот мой код views.py

class DirectView(mixins.CreateModelMixin):
    serializer_class=DirectSerializer
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)
    def post(self,request,*args,**kwargs):
        return self.create(request,*args,**kwargs)

и мой urls.py

path('direct/',DirectView.as_view(),name='direct'),

, но всякий раз, когда я пытался запустить сервер, я получал ошибку как

AttributeError: type object 'DirectView' has no attribute 'as_view'

Я не понимаю, в чем проблема?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Если мы посмотрим на исходный код mixins.CreateModelMixin, мы увидим, что он унаследован от object ( встроенный тип ) и, следовательно, он не зависит от любого вида наследования, кроме встроенного типа .

Кроме этого, Mixin классы - это особый вид множественного наследования.Вы можете прочитать больше о Mixins здесь .Короче говоря, Mixins предоставляет дополнительные функциональные возможности для класса (вроде вспомогательный класс ).


Итак, каково решение этой проблемы?

Решение - 1: Используйте CreateAPIView
Поскольку вы пытаетесь расширить функциональность CreateModelMixin, настоятельно рекомендуется использовать этот встроенный вид DRF как,

<b>from rest_framework import generics</b>


class DirectView(<b>generics.CreateAPIView</b>):
    serializer_class = DirectSerializer

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)



Ссылка
1. Что такое миксин и чем он полезен?
2. Класс Python наследует объект

0 голосов
/ 11 декабря 2018

Ваш класс DirectView должен наследоваться от класса View в Django, чтобы использовать as_view.

from django.views.generic import View

class DirectView(mixins.CreateModelMixin, View):

Если вы используете остальную среду,возможно, вам нужно наследование CreateAPIView или GenericAPIViewCreateModelMixin), которое является API-эквивалентом класса View, упомянутого выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...