From 4ec1cf5f28be5b31791c803f8db63e5c4bbf65ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Thu, 30 Jan 2025 11:41:01 +0100 Subject: [PATCH] Improve purchase __str__ --- games/models.py | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/games/models.py b/games/models.py index cde0a70..a61de92 100644 --- a/games/models.py +++ b/games/models.py @@ -3,7 +3,7 @@ from datetime import timedelta from django.core.exceptions import ValidationError from django.db import models from django.db.models import F, Sum -from django.template.defaultfilters import slugify +from django.template.defaultfilters import floatformat, slugify from django.utils import timezone from common.time import format_duration @@ -131,6 +131,22 @@ class Purchase(models.Model): ) created_at = models.DateTimeField(auto_now_add=True) + @property + def standardized_price(self): + return ( + f"{floatformat(self.converted_price)} {self.converted_currency}" + if self.converted_price + else None + ) + + @property + def num_purchases(self): + return self.games.count() + + @property + def has_one_item(self): + return self.games.count() == 1 + @property def standardized_name(self): return self.name if self.name else self.first_game.name @@ -140,19 +156,7 @@ class Purchase(models.Model): return self.games.first() def __str__(self): - additional_info = [ - self.get_type_display() if self.type != Purchase.GAME else "", - ( - f"{self.first_game.platform} version on {self.platform}" - if self.platform != self.first_game.platform - else self.platform - ), - self.first_game.year_released, - self.get_ownership_type_display(), - ] - return ( - f"{self.first_game} ({', '.join(filter(None, map(str, additional_info)))})" - ) + return f"{self.standardized_name} ({self.num_purchases}, {self.date_purchased}, {self.standardized_price})" def is_game(self): return self.type == self.GAME