diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py
index fd95b928dd..09ad6245ee 100644
--- a/src/pretix/base/models/orders.py
+++ b/src/pretix/base/models/orders.py
@@ -3218,6 +3218,12 @@ class CartPosition(AbstractPosition):
self.tax_code = line_price.code
self.save(update_fields=['line_price_gross', 'tax_rate'])
+ @property
+ def discount_percentage(self):
+ if not self.line_price_gross:
+ return 0
+ return (self.line_price_gross - self.price) / self.line_price_gross * 100
+
@property
def addons_without_bundled(self):
addons = [op for op in self.addons.all() if not op.is_bundled]
diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html b/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html
index 4f39027602..23dae50c8a 100644
--- a/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html
+++ b/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html
@@ -268,8 +268,14 @@
{% if line.discount and line.line_price_gross != line.price %}
-
- {% trans "Discounted" %}
+
+ {% if line.price < line.line_price_gross %}
+ {% blocktranslate trimmed with percent=line.discount_percentage|floatformat:0 %}
+ {{ percent }} % Discount
+ {% endblocktranslate %}
+ {% else %}
+ {% trans "Discounted" %}
+ {% endif %}
{% endif %}
@@ -335,8 +341,14 @@
{% if line.discount and line.line_price_gross != line.price %}
-
- {% trans "Discounted" %}
+
+ {% if line.price < line.line_price_gross %}
+ {% blocktranslate trimmed with percent=line.discount_percentage|floatformat:0 %}
+ {{ percent }} % Discount
+ {% endblocktranslate %}
+ {% else %}
+ {% trans "Discounted" %}
+ {% endif %}
{% endif %}