diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index 8ec03af486..164ca6aa3e 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -312,7 +312,6 @@ class OrderSerializer(I18nAwareModelSerializer): # Even though all fields that shouldn't be edited are marked as read_only in the serializer # (hopefully), we'll be extra careful here and be explicit about the model fields we update. update_fields = ['comment', 'checkin_attention', 'email', 'locale'] - print(validated_data) if 'invoice_address' in validated_data: iadata = validated_data.pop('invoice_address') @@ -598,6 +597,9 @@ class OrderCreateSerializer(I18nAwareModelSerializer): {'positionid': ["If you set addon_to on any position, you need to specify position IDs manually."]} for p in data ] + else: + for i, p in enumerate(data): + p['positionid'] = i + 1 if any(errs): raise ValidationError(errs) diff --git a/src/tests/api/test_orders.py b/src/tests/api/test_orders.py index 763ba453d0..ff48f3bce6 100644 --- a/src/tests/api/test_orders.py +++ b/src/tests/api/test_orders.py @@ -2064,6 +2064,37 @@ def test_order_create_positionid_validation(token_client, organizer, event, item ] } + res['positions'] = [ + { + "item": item.pk, + "variation": None, + "price": "23.00", + "attendee_name_parts": {"full_name": "Peter"}, + "attendee_email": None, + "answers": [], + "subevent": None + }, + { + "item": item.pk, + "variation": None, + "price": "23.00", + "attendee_name_parts": {"full_name": "Peter"}, + "attendee_email": None, + "answers": [], + "subevent": None + } + ] + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/orders/'.format( + organizer.slug, event.slug + ), format='json', data=res + ) + assert resp.status_code == 201 + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + assert o.positions.first().positionid == 1 + assert o.positions.last().positionid == 2 + @pytest.mark.django_db def test_order_create_answer_validation(token_client, organizer, event, item, quota, question, question2):