diff --git a/src/pretix/base/services/tickets.py b/src/pretix/base/services/tickets.py index b5d0d9f5a..63ace06f2 100644 --- a/src/pretix/base/services/tickets.py +++ b/src/pretix/base/services/tickets.py @@ -19,9 +19,11 @@ def generate(order_position: str, provider: str): ct = CachedTicket.objects.get(order_position=order_position, provider=provider) except CachedTicket.MultipleObjectsReturned: CachedTicket.objects.filter(order_position=order_position, provider=provider).delete() - ct = CachedTicket(order_position=order_position, provider=provider) + ct = CachedTicket.objects.create(order_position=order_position, provider=provider, extension='', + type='', file=None) except CachedTicket.DoesNotExist: - ct = CachedTicket(order_position=order_position, provider=provider) + ct = CachedTicket.objects.create(order_position=order_position, provider=provider, extension='', + type='', file=None) with language(order_position.order.locale): responses = register_ticket_outputs.send(order_position.order.event) diff --git a/src/pretix/presale/views/order.py b/src/pretix/presale/views/order.py index e0d711ec9..475f6f63e 100644 --- a/src/pretix/presale/views/order.py +++ b/src/pretix/presale/views/order.py @@ -534,11 +534,13 @@ class OrderDownload(EventViewMixin, OrderDetailMixin, View): if 'ajax' in request.GET: return HttpResponse('1' if ct and ct.file else '0') - elif not ct or not ct.file: + elif not ct: generate.apply_async(args=(self.order_position.id, self.output.identifier)) return render(request, "pretixbase/cachedfiles/pending.html", {}) + elif not ct.file: + return render(request, "pretixbase/cachedfiles/pending.html", {}) else: - resp = FileResponse(ct.file.file, content_type='application/pdf') + resp = FileResponse(ct.file.file, content_type=ct.type) resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}-{}{}"'.format( self.request.event.slug.upper(), self.order.code, self.order_position.positionid, self.output.identifier, ct.extension