2

I'm getting the following error when posting a new Product to my application

Traceback (most recent call last):
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/viewsets.py", line 116, in view
    return self.dispatch(request, *args, **kwargs)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/views.py", line 495, in dispatch
    response = self.handle_exception(exc)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/views.py", line 455, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/views.py", line 492, in dispatch
    response = handler(request, *args, **kwargs)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/mixins.py", line 20, in create
    serializer.is_valid(raise_exception=True)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/serializers.py", line 236, in is_valid
    self._validated_data = self.run_validation(self.initial_data)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/serializers.py", line 434, in run_validation
    value = self.to_internal_value(data)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/serializers.py", line 488, in to_internal_value
    validated_value = field.run_validation(primitive_value)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/serializers.py", line 623, in run_validation
    value = self.to_internal_value(data)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/serializers.py", line 662, in to_internal_value
    validated = self.child.run_validation(item)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/serializers.py", line 436, in run_validation
    self.run_validators(value)
  File "/mnt/c/Users/connect/Desktop/PIM/env/lib/python3.6/site-packages/rest_framework/serializers.py", line 465, in run_validators
    to_validate.update(value)
TypeError: 'Category' object is not iterable

my serializer.py

from rest_framework import serializers
from products_and_categories.models import Product, Category
from django.db import models

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ('id', "name", 'products', 'categories')

    def to_representation(self, obj):
        if 'categories' not in self.fields:
            self.fields['categories'] = CategorySerializer(obj, many=True)      
        return super(CategorySerializer, self).to_representation(obj)

    def to_internal_value(self, data):
        try:
            try:
                obj_id = data['id']
                return Category.objects.get(id=obj_id)
            except KeyError:
                raise serializers.ValidationError(
                    'id is a required field.'
                )
            except ValueError:
                raise serializers.ValidationError(
                    'id must be an integer.'
                )
        except Category.DoesNotExist:
            raise serializers.ValidationError(
            'Obj does not exist.'
            )


class ProductSerializer(serializers.ModelSerializer):
    categories = CategorySerializer(many=True)#, queryset= Category.objects.all(), slug_field='categories')

    class Meta:
        model = Product
        fields = ('id', "product_code", "name", "quantity", "price", 'categories')
        #.....

Any idea why this is happening ?

I don't quiet understand what it means by it's not iterable, what part of the code exactly is causing this error?

I would really appreciate any help

the post is in the following format

{

"id": 22,

"product_code": "dklj",

"name": "kdlj",

"quantity": 15,
"price": 15,
"categories": [ {
    "id": 5,
    "name": "Test category 3",
    "products": [],
    "categories": []
}]

}

1 Answer 1

2

Here: self.fields['categories'] = CategorySerializer(obj, many=True)

You're telling CategorySerializer to prepare for a list of categories but you're only passing one.

Sign up to request clarification or add additional context in comments.

5 Comments

i don't think that's the reason, I removed "many=True" and get the same error
I don't have the full context of what you're trying to accomplish, but, I see that you instantiate CategorySerializer in 2 places, both times with many=True; chances are that somewhere there, instead of passing a queryset of Categories you're passing an instance.
Alex, you're right. This happens when trying to pass "instance" instead of a "queryset". In my case, I had defined get_queryset as Category.objects.get(user_id="user_1") instead of Category.objects.filter(user_id="user_1")
Wonderful! Thank you Jai, I also got the same error with get method. Finally my error also resolved with filter method
please can you share the solution to this please

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.