diff --git a/src/plainui/views/badges.py b/src/plainui/views/badges.py
index b83b86f38188329d5e13077c1a51024feb034cc6..9ec8dd7d431460d5497bcdfcbced2a004052a456 100644
--- a/src/plainui/views/badges.py
+++ b/src/plainui/views/badges.py
@@ -107,9 +107,12 @@ class RedeemTokenDetailView(ConferenceRequiredMixin, DetailView):
     context_object_name = 'token'
 
     def get_context_data(self, **kwargs: Any) -> dict[str, Any]:
+        # Regenerate the qr code if needed
+        if self.object.qr_full is None:
+            self.object.save()
         return {
             **super().get_context_data(**kwargs),
-            'token_svg': self.object.qr_full.read().decode('utf-8') if selb.object.qr_full else None,
+            'token_svg': self.object.qr_full.read().decode('utf-8') if self.object.qr_full else None,
             'conf': self.conf,
         }