I have my model class:
class Subscription(models.Model): email = models.EmailField(max_length=250, unique=True) def __str__(self): return self.email
and my View:
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)
My model only takes in 1 field which is the email. Not sure why I keep getting ‘TypeError: post() takes 1 positional argument but 2 were given’.
Advertisement
Answer
Your post
is a method, so the first parameter is 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.