Improve purchase __str__
Django CI/CD / test (push) Successful in 1m2s Details
Django CI/CD / build-and-push (push) Successful in 2m13s Details

This commit is contained in:
Lukáš Kucharczyk 2025-01-30 11:41:01 +01:00
parent d936fdc60d
commit 4ec1cf5f28
Signed by: lukas
SSH Key Fingerprint: SHA256:vMuSwvwAvcT6htVAioMP7rzzwMQNi3roESyhv+nAxeg
1 changed files with 18 additions and 14 deletions

View File

@ -3,7 +3,7 @@ from datetime import timedelta
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.db.models import F, Sum 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 django.utils import timezone
from common.time import format_duration from common.time import format_duration
@ -131,6 +131,22 @@ class Purchase(models.Model):
) )
created_at = models.DateTimeField(auto_now_add=True) 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 @property
def standardized_name(self): def standardized_name(self):
return self.name if self.name else self.first_game.name return self.name if self.name else self.first_game.name
@ -140,19 +156,7 @@ class Purchase(models.Model):
return self.games.first() return self.games.first()
def __str__(self): def __str__(self):
additional_info = [ return f"{self.standardized_name} ({self.num_purchases}, {self.date_purchased}, {self.standardized_price})"
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)))})"
)
def is_game(self): def is_game(self):
return self.type == self.GAME return self.type == self.GAME