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
Post a Comment