python - DRF test client unable to post list of JSON -


i've created listcreateapiview, looks this:

 13 class cartitemview(generics.listcreateapiview):  14     serializer_class = cartitemserializer  15  16     def get_serializer(self, *args, **kwargs):  17         if 'data' in kwargs:  18             data = kwargs['data']  19             if isinstance(data, list):  20                 kwargs['many'] = true  21  22         return super(cartitemview, self).get_serializer(*args, **kwargs)  23 

and here's serializer:

 47 class cartitemserializer(serializers.modelserializer):  48     menu_item = serializers.primarykeyrelatedfield(queryset = menuitem.objects.all())  49     cart = serializers.primarykeyrelatedfield(queryset = cart.objects.all(), required=false)  50  51     class meta:  52         model = cartitem  53         depth = 1  54  55     def create(self, validated_data):  56         menu_item = validated_data['menu_item']  57         cart = validated_data['cart']  58         cart_item = cartitem.objects.create(menu_item = menu_item, cart = cart, no_of_units = validated_data['no_of_units'])  59         if cart.cart_state == cart.empty:  60             cart.item_added_to_cart()  61             cart.save()  62         return cart_item 

now, i'm trying post list of json objects test this:

 1 rest_framework.test import apitestcase  .....  17 class cartitemviewtest(apitestcase):  18     def test_create_cart_items(self):  22         data = [{'cart': '4', 'total_qty': '5', 'menu_item': '1'}]  23         cart_item_url = '/api/v1/cart/items/'  24         response = self.client.post(cart_item_url, data=data)  26         print response.data  29         self.assertequal(len(resp.data['cart_items']), 1) 

but throws following error:

====================================================================== error: test_create_cart_items (app.tests.cartitemviewtest) ---------------------------------------------------------------------- traceback (most recent call last):   file "/home/ubuntu/src/app/tests.py", line 24, in test_create_cart_items     response = self.client.post(cart_item_url, data=data)   file "/home/ubuntu/envs/rj-venv/local/lib/python2.7/site-packages/rest_framework/test.py", line 168, in post     path, data=data, format=format, content_type=content_type, **extra)   file "/home/ubuntu/envs/rj-venv/local/lib/python2.7/site-packages/rest_framework/test.py", line 89, in post     data, content_type = self._encode_data(data, format, content_type)   file "/home/ubuntu/envs/rj-venv/local/lib/python2.7/site-packages/rest_framework/test.py", line 64, in _encode_data     ret = renderer.render(data)   file "/home/ubuntu/envs/rj-venv/local/lib/python2.7/site-packages/rest_framework/renderers.py", line 678, in render     return encode_multipart(self.boundary, data)   file "/home/ubuntu/envs/rj-venv/local/lib/python2.7/site-packages/django/test/client.py", line 168, in encode_multipart     (key, value) in data.items(): attributeerror: 'list' object has no attribute 'items' 

btw, when fire api rest client, works fine. there wrong way i'm using test client post list of json?

you should specify json format:

response = self.client.post(cart_item_url, data=data, format='json') 

Comments

Popular posts from this blog

How to provide Authorization & Authentication using Asp.net, C#? -

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

How to use Authorization & Authentication in Asp.net, C#? -