TypeError: post() принимает 1 позиционный аргумент, но было задано 2
У меня есть класс моей модели:
class Subscription(models.Model):
email = models.EmailField(max_length=250, unique=True)
def __str__(self):
return self.email
и мой вид:
class SubscriptionView(APIView):
queryset = Subscription.objects.all()
def post(request):
email = request.data.get('email')
print(email)
save_email = Subscription.objects.create(email=email)
save_email.save()
return Response(status=status.HTTP_201_CREATED)
Моя модель принимает только 1 поле, которое является email. Не знаю, почему я продолжаю получать 'TypeError: post() принимает 1 позиционный аргумент, но было задано 2'
Благодарю за любую помощь!
Ваш post
является методом, поэтому первым параметром будет self
:
class SubscriptionView(APIView):
queryset = Subscription.objects.all()
def post(self, request):
email = request.data.get('email')
Subscription.objects.create(email=email)
return Response(status=status.HTTP_201_CREATED)
It is however quite seldom that one implements a post
method itself. Usually you work for example with a CreateAPIView
[drf-doc], and one can let the serializer, etc. handle all the work.
post является методом экземпляра класса SubscriptionView
, при вызове метода экземпляра Python автоматически передает object reference
этого класса. Поэтому вам необходимо получить ссылку на этот объект в вашем методе экземпляра.
Вы не получили ссылку на объект в вашем методе сообщения, поэтому интерпретатор Python показывает вам:
TypeError: post() takes 1 positional argument but 2 were given
but 2 were given
Потому что Python вызывает сообщение типа post(SubscriptionView(), request)
, но вы получаете только request
Вы можете получить object reference
, используя любое имя, но использование self
является стандартным.
class SubscriptionView(APIView):
queryset = Subscription.objects.all()
def post(self, request):
email = request.data.get('email')
Subscription.objects.create(email=email)
return Response(status=status.HTTP_201_CREATED)