diff --git a/doc/api/resources/orders.rst b/doc/api/resources/orders.rst index d42d96058f..8e9f2e6d56 100644 --- a/doc/api/resources/orders.rst +++ b/doc/api/resources/orders.rst @@ -76,6 +76,10 @@ checkins list of objects List of check-i downloads list of objects List of ticket download options ├ output string Ticket output provider (e.g. ``pdf``, ``passbook``) └ url string Download URL +answers list of objects Answers to user-defined questions +├ question integer Internal ID of the answered question +├ answer string Text representation of the answer +└ options list of integers Internal IDs of selected option(s)s (only for choice types) ===================================== ========================== ======================================================= @@ -152,6 +156,13 @@ Order endpoints "datetime": "2017-12-25T12:45:23Z" } ], + "answers": [ + { + "question": 12, + "answer": "Foo", + "options": [] + } + ], "downloads": [ { "output": "pdf", @@ -248,6 +259,13 @@ Order endpoints "datetime": "2017-12-25T12:45:23Z" } ], + "answers": [ + { + "question": 12, + "answer": "Foo", + "options": [] + } + ], "downloads": [ { "output": "pdf", @@ -359,6 +377,13 @@ Order position endpoints "datetime": "2017-12-25T12:45:23Z" } ], + "answers": [ + { + "question": 12, + "answer": "Foo", + "options": [] + } + ], "downloads": [ { "output": "pdf", @@ -428,6 +453,13 @@ Order position endpoints "datetime": "2017-12-25T12:45:23Z" } ], + "answers": [ + { + "question": 12, + "answer": "Foo", + "options": [] + } + ], "downloads": [ { "output": "pdf", diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index f969c64b69..7492878261 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -4,6 +4,7 @@ from rest_framework.reverse import reverse from pretix.api.serializers.i18n import I18nAwareModelSerializer from pretix.base.models import ( Checkin, Invoice, InvoiceAddress, InvoiceLine, Order, OrderPosition, + QuestionAnswer, ) from pretix.base.signals import register_ticket_outputs @@ -14,6 +15,12 @@ class InvoiceAdddressSerializer(I18nAwareModelSerializer): fields = ('last_modified', 'company', 'name', 'street', 'zipcode', 'city', 'country', 'vat_id') +class AnswerSerializer(I18nAwareModelSerializer): + class Meta: + model = QuestionAnswer + fields = ('question', 'answer', 'options') + + class CheckinSerializer(I18nAwareModelSerializer): class Meta: model = Checkin @@ -72,13 +79,14 @@ class PositionDownloadsField(serializers.Field): class OrderPositionSerializer(I18nAwareModelSerializer): checkins = CheckinSerializer(many=True) + answers = AnswerSerializer(many=True) downloads = PositionDownloadsField(source='*') order = serializers.SlugRelatedField(slug_field='code', read_only=True) class Meta: model = OrderPosition fields = ('id', 'order', 'positionid', 'item', 'variation', 'price', 'attendee_name', 'attendee_email', - 'voucher', 'tax_rate', 'tax_value', 'secret', 'addon_to', 'checkins', 'downloads') + 'voucher', 'tax_rate', 'tax_value', 'secret', 'addon_to', 'checkins', 'downloads', 'answers') class OrderSerializer(I18nAwareModelSerializer): diff --git a/src/pretix/api/views/order.py b/src/pretix/api/views/order.py index 4967b18e09..0d0d339005 100644 --- a/src/pretix/api/views/order.py +++ b/src/pretix/api/views/order.py @@ -36,7 +36,7 @@ class OrderViewSet(viewsets.ReadOnlyModelViewSet): def get_queryset(self): return self.request.event.orders.prefetch_related( - 'positions', 'positions__checkins', 'positions__item', + 'positions', 'positions__checkins', 'positions__item', 'positions__answers', 'positions__answers__options' ).select_related( 'invoice_address' ) @@ -98,7 +98,7 @@ class OrderPositionViewSet(viewsets.ReadOnlyModelViewSet): def get_queryset(self): return OrderPosition.objects.filter(order__event=self.request.event).prefetch_related( - 'checkins', + 'checkins', 'answers', 'answers__options' ).select_related( 'item', 'order', 'order__event', 'order__event__organizer' ) diff --git a/src/tests/api/test_orders.py b/src/tests/api/test_orders.py index 4aaeea2e7b..ec15b35051 100644 --- a/src/tests/api/test_orders.py +++ b/src/tests/api/test_orders.py @@ -56,7 +56,8 @@ TEST_ORDERPOSITION_RES = { "secret": "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", "addon_to": None, "checkins": [], - "downloads": [] + "downloads": [], + "answers": [] } TEST_ORDER_RES = { "code": "FOO",