diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index 595ba172eb3b2bf458cd83b372fd606df33c5dde..b82a5ec9d00128b96db2877e5e7e9784e1a34f55 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -52,7 +52,7 @@ class TimePeriod(ExtensibleModel):
     time_end = models.TimeField(verbose_name=_("End time"))
 
     def __str__(self) -> str:
-        return "{}, {}.".format(self.get_weekday_display(), self.period,)
+        return f"{self.get_weekday_display()}, {self.period}."
 
     @classmethod
     def get_times_dict(cls) -> Dict[int, Tuple[datetime, datetime]]:
@@ -168,7 +168,7 @@ class Subject(ExtensibleModel):
     colour_bg = ColorField(verbose_name=_("Background colour"), blank=True)
 
     def __str__(self) -> str:
-        return "{} ({})".format(self.short_name, self.name)
+        return f"{self.short_name} ({self.name})"
 
     class Meta:
         ordering = ["name", "short_name"]
@@ -183,7 +183,7 @@ class Room(ExtensibleModel):
     name = models.CharField(verbose_name=_("Long name"), max_length=255)
 
     def __str__(self) -> str:
-        return "%s (%s)" % (self.name, self.short_name)
+        return f"{self.name} ({self.short_name})"
 
     class Meta:
         ordering = ["name", "short_name"]
@@ -222,9 +222,7 @@ class Lesson(ExtensibleModel, GroupPropertiesMixin, TeacherPropertiesMixin):
         return CalendarWeek(year=year, week=week)
 
     def __str__(self):
-        return "{}, {}, {}".format(
-            format_m2m(self.groups), self.subject.short_name, format_m2m(self.teachers),
-        )
+        return f"{format_m2m(self.groups)}, {self.subject.short_name}, {format_m2m(self.teachers)}"
 
     class Meta:
         ordering = ["date_start", "subject"]
@@ -281,7 +279,7 @@ class LessonSubstitution(ExtensibleModel):
         return week[self.lesson_period.period.weekday]
 
     def __str__(self):
-        return "{}, {}".format(str(self.lesson_period), date_format(self.date))
+        return f"{self.lesson_period}, {date_format(self.date)}"
 
     class Meta:
         unique_together = [["lesson_period", "week"]]
@@ -363,7 +361,7 @@ class LessonPeriod(ExtensibleModel):
         return self.lesson.groups
 
     def __str__(self) -> str:
-        return "{}, {}".format(str(self.period), str(self.lesson))
+        return f"{self.period}, {self.lesson}"
 
     class Meta:
         ordering = [
@@ -427,7 +425,7 @@ class AbsenceReason(ExtensibleModel):
 
     def __str__(self):
         if self.name:
-            return "{} ({})".format(self.short_name, self.name)
+            return f"{self.short_name} ({self.name})"
         else:
             return self.short_name
 
@@ -587,7 +585,7 @@ class SupervisionArea(ExtensibleModel):
     colour_bg = ColorField()
 
     def __str__(self):
-        return "{} ({})".format(self.name, self.short_name)
+        return f"{self.name} ({self.short_name})"
 
     class Meta:
         ordering = ["name"]
@@ -657,7 +655,7 @@ class Break(ExtensibleModel):
         return breaks
 
     def __str__(self):
-        return "{} ({})".format(self.name, self.short_name)
+        return f"{self.name} ({self.short_name})"
 
     class Meta:
         ordering = ["after_period"]
@@ -704,7 +702,7 @@ class Supervision(ExtensibleModel):
         return [self.teacher]
 
     def __str__(self):
-        return "{}, {}, {}".format(self.break_item, self.area, self.teacher)
+        return f"{self.break_item}, {self.area}, {self.teacher}"
 
     class Meta:
         ordering = ["area", "break_item"]
@@ -732,7 +730,7 @@ class SupervisionSubstitution(ExtensibleModel):
         return [self.teacher]
 
     def __str__(self):
-        return "{}, {}".format(self.supervision, date_format(self.date))
+        return f"{self.supervision}, {date_format(self.date)}"
 
     class Meta:
         ordering = ["date", "supervision"]
@@ -779,7 +777,7 @@ class Event(ExtensibleModel, GroupPropertiesMixin, TeacherPropertiesMixin):
         if self.title:
             return self.title
         else:
-            return _("Event {}".format(self.pk))
+            return _(f"Event {self.pk}")
 
     @property
     def period_from_on_day(self) -> int:
@@ -848,7 +846,7 @@ class ExtraLesson(ExtensibleModel, GroupPropertiesMixin):
     )
 
     def __str__(self):
-        return "{}, {}, {}".format(self.week, self.period, self.subject)
+        return f"{self.week}, {self.period}, {self.subject}"
 
     class Meta:
         verbose_name = _("Extra lesson")
diff --git a/aleksis/apps/chronos/util/build.py b/aleksis/apps/chronos/util/build.py
index a73798e99ffaddad4b29d4abbaf22846d3bde184..e53eea2a1dec130e395ed01b0c2cea674aa2bf40 100644
--- a/aleksis/apps/chronos/util/build.py
+++ b/aleksis/apps/chronos/util/build.py
@@ -267,12 +267,12 @@ def build_substitutions_list(wanted_day: date) -> List[dict]:
         if not sub.cancelled_for_teachers:
             sort_a = sub.lesson_period.lesson.group_names
         else:
-            sort_a = "Z.{}".format(sub.lesson_period.lesson.teacher_names)
+            sort_a = f"Z.{sub.lesson_period.lesson.teacher_names}"
 
         row = {
             "type": "substitution",
             "sort_a": sort_a,
-            "sort_b": "{}".format(sub.lesson_period.period.period),
+            "sort_b": str(sub.lesson_period.period.period),
             "el": sub,
         }
 
@@ -284,8 +284,8 @@ def build_substitutions_list(wanted_day: date) -> List[dict]:
     for super_sub in super_subs:
         row = {
             "type": "supervision_substitution",
-            "sort_a": "Z.{}".format(super_sub.teacher),
-            "sort_b": "{}".format(super_sub.supervision.break_item.after_period_number),
+            "sort_a": f"Z.{super_sub.teacher}",
+            "sort_b": str(super_sub.supervision.break_item.after_period_number),
             "el": super_sub,
         }
         rows.append(row)
@@ -296,8 +296,8 @@ def build_substitutions_list(wanted_day: date) -> List[dict]:
     for extra_lesson in extra_lessons:
         row = {
             "type": "extra_lesson",
-            "sort_a": "{}".format(extra_lesson.group_names),
-            "sort_b": "{}".format(extra_lesson.period.period),
+            "sort_a": str(extra_lesson.group_names),
+            "sort_b": str(extra_lesson.period.period),
             "el": extra_lesson,
         }
         rows.append(row)
@@ -309,12 +309,12 @@ def build_substitutions_list(wanted_day: date) -> List[dict]:
         if event.groups.all():
             sort_a = event.group_names
         else:
-            sort_a = "Z.".format(event.teacher_names)
+            sort_a = f"Z.{event.teacher_names}"
 
         row = {
             "type": "event",
             "sort_a": sort_a,
-            "sort_b": "{}".format(event.period_from_on_day),
+            "sort_b": str(event.period_from_on_day),
             "el": event,
         }
         rows.append(row)
diff --git a/aleksis/apps/chronos/util/format.py b/aleksis/apps/chronos/util/format.py
index dbf704c22ff01a413cbfc0f8df538c4386faac07..ee9be702d00506f118974e533dd237f63825fb76 100644
--- a/aleksis/apps/chronos/util/format.py
+++ b/aleksis/apps/chronos/util/format.py
@@ -10,4 +10,4 @@ def format_m2m(f, attr: str = "short_name") -> str:
 
 def format_date_period(day: date, period: "TimePeriod") -> str:
     """Format date and time period."""
-    return "{}, {}.".format(date_format(day), period.period)
+    return f"{date_format(date_format(day))}, {period.period}."