diff --git a/src/pretix/base/migrations/0041_auto_20161018_1654.py b/src/pretix/base/migrations/0041_auto_20161018_1654.py new file mode 100644 index 0000000000..abd497922b --- /dev/null +++ b/src/pretix/base/migrations/0041_auto_20161018_1654.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.2 on 2016-10-18 16:54 +from __future__ import unicode_literals + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pretixbase', '0040_u2fdevice'), + ] + + operations = [ + migrations.AlterField( + model_name='cachedticket', + name='cachedfile', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='pretixbase.CachedFile'), + ), + ] diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index 294ee9c181..91bafab35b 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -304,7 +304,7 @@ class Order(LoggedModel): class CachedTicket(models.Model): order = models.ForeignKey(Order, on_delete=models.CASCADE) - cachedfile = models.ForeignKey(CachedFile, on_delete=models.CASCADE) + cachedfile = models.ForeignKey(CachedFile, on_delete=models.CASCADE, null=True) provider = models.CharField(max_length=255) diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index 1d956a6217..8dfc998fd1 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -420,19 +420,14 @@ class OrderDownload(OrderView): messages.error(request, _('Order is not paid.')) return redirect(self.get_order_url()) - try: - ct = CachedTicket.objects.get(order=self.order, provider=self.output.identifier) - except CachedTicket.DoesNotExist: - ct = CachedTicket(order=self.order, provider=self.output.identifier) - try: - ct.cachedfile - except CachedFile.DoesNotExist: + ct = CachedTicket.objects.get_or_create(order=self.order, provider=self.output.identifier)[0] + if not ct.cachedfile: cf = CachedFile() cf.date = now() cf.expires = self.request.event.date_from + timedelta(days=30) cf.save() ct.cachedfile = cf - ct.save() + ct.save() if not ct.cachedfile.file.name: tickets.generate.apply_async(args=(self.order.id, self.output.identifier)) return redirect(reverse('cachedfile.download', kwargs={'id': ct.cachedfile.id})) diff --git a/src/pretix/presale/views/order.py b/src/pretix/presale/views/order.py index 7f42fd2f03..a2163df12b 100644 --- a/src/pretix/presale/views/order.py +++ b/src/pretix/presale/views/order.py @@ -501,19 +501,14 @@ class OrderDownload(EventViewMixin, OrderDetailMixin, View): messages.error(request, _('Ticket download is not (yet) enabled.')) return redirect(self.get_order_url()) - try: - ct = CachedTicket.objects.get(order=self.order, provider=self.output.identifier) - except CachedTicket.DoesNotExist: - ct = CachedTicket(order=self.order, provider=self.output.identifier) - try: - ct.cachedfile - except CachedFile.DoesNotExist: + ct = CachedTicket.objects.get_or_create(order=self.order, provider=self.output.identifier)[0] + if not ct.cachedfile: cf = CachedFile() cf.date = now() cf.expires = self.request.event.date_from + timedelta(days=30) cf.save() ct.cachedfile = cf - ct.save() + ct.save() generate.apply_async(args=(self.order.id, self.output.identifier)) return redirect(reverse('cachedfile.download', kwargs={'id': ct.cachedfile.id}))