DRF: Incorrect type. Expected pk value, received str - ManyToManyField in Django APIs
How to fix if Incorrect type. Expected pk value, received str - ManyToManyField in Django Rest Framework
1. models.py
class Cart(models.Model):
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
events = models.ManyToManyField(Event, null=True, blank=True)
resourse_files = models.ManyToManyField(ResourseDetail, null=True, blank=True)
status = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)2. serializers.py
class CartSerializer(serializers.ModelSerializer):
class Meta:
model = Cart
fields = '__all__'or
class CartSerializer(serializers.ModelSerializer):
events = EventSerializer(many=True)
resourse_files = ResourseDetailSerializer(many=True)
class Meta:
model = Cart
fields = '__all__'3. views.py
class CartView(viewsets.ModelViewSet):
'''Cart api view /cart/'''
serializer_class = CartSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
user = self.request.user
return Cart.objects.filter(user=user)
def create(self, *args, **kwargs):
current_user = self.request.user
cart = Cart(user=current_user)
cart.save()
try:
events = self.request.data['events']
events = events[1:-1].split(",")
event_ids = []
[event_ids.append(int(i)) for i in events]
cart.events.set(event_ids)
except:
pass
try:
resourse_files = self.request.data['resourse_files']
resourse_files = resourse_files[1:-1].split(",")
resourse_file_ids = []
[resourse_file_ids.append(int(i)) for i in resourse_files]
cart.resourse_files.set(resourse_file_ids)
except:
pass
cart.save()
serializer = CartSerializer(cart)
return Response(serializer.data)
def update(self, request, *args, **kwargs):
current_user = request.user.id
cart = Cart.objects.filter(user=current_user).first()
try:
events = self.request.data['events']
events = events[1:-1].split(",")
event_ids = []
try:
[event_ids.append(int(i)) for i in events]
except:
pass
if not event_ids:
cart.events.clear()
else:
cart.events.set(event_ids)
except:
pass
try:
resourse_files = self.request.data['resourse_files']
resourse_files = resourse_files[1:-1].split(",")
resourse_file_ids = []
try:
[resourse_file_ids.append(int(i)) for i in resourse_files]
except:
pass
if not resourse_file_ids:
cart.resourse_files.clear()
else:
cart.resourse_files.set(resourse_file_ids)
except:
pass
cart.save()
serializer = CartSerializer(cart)
return Response(serializer.data)
no need to custmise destroy and get detail methods
If any issue found please comment
Comments
Post a Comment