Add platform to Game
This commit is contained in:
parent
23c1ce1f96
commit
e571feadef
|
@ -263,6 +263,8 @@ def NameWithIcon(
|
||||||
game = Game.objects.get(pk=game_id)
|
game = Game.objects.get(pk=game_id)
|
||||||
name = edition.name if edition else game.name
|
name = edition.name if edition else game.name
|
||||||
platform = edition.platform if edition else None
|
platform = edition.platform if edition else None
|
||||||
|
if game.platform:
|
||||||
|
platform = game.platform
|
||||||
link = reverse("view_game", args=[int(game_id)])
|
link = reverse("view_game", args=[int(game_id)])
|
||||||
content = Div(
|
content = Div(
|
||||||
[("class", "inline-flex gap-2 items-center")],
|
[("class", "inline-flex gap-2 items-center")],
|
||||||
|
|
|
@ -156,7 +156,7 @@ class EditionForm(forms.ModelForm):
|
||||||
class GameForm(forms.ModelForm):
|
class GameForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Game
|
model = Game
|
||||||
fields = ["name", "sort_name", "year_released", "wikidata"]
|
fields = ["name", "sort_name", "platform", "year_released", "wikidata"]
|
||||||
widgets = {"name": autofocus_input_widget}
|
widgets = {"name": autofocus_input_widget}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
# Generated by Django 5.1.5 on 2025-01-29 17:08
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
from games.models import Game
|
||||||
|
|
||||||
|
|
||||||
|
def copy_platform_to_game(apps, schema_editor):
|
||||||
|
single_edition_games = Game.objects.annotate(
|
||||||
|
num_editions=models.Count("editions")
|
||||||
|
).filter(num_editions=1)
|
||||||
|
multi_edition_games = Game.objects.annotate(
|
||||||
|
num_editions=models.Count("editions")
|
||||||
|
).filter(num_editions__gt=1)
|
||||||
|
for game in single_edition_games:
|
||||||
|
game.platform = game.editions.first().platform
|
||||||
|
game.save()
|
||||||
|
|
||||||
|
for game in multi_edition_games:
|
||||||
|
all_editions = game.editions.all()
|
||||||
|
for e in all_editions:
|
||||||
|
# game with this platform edition already exists
|
||||||
|
if game.platform == e.platform:
|
||||||
|
print(
|
||||||
|
f"Game '{game}' with ID '{game.pk}' already has edition with platform '{game.platform}', skipping creation."
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
print(
|
||||||
|
f"Game '{game}' with ID '{game.pk}' missing edition with platform '{e.platform}', creating..."
|
||||||
|
)
|
||||||
|
Game.objects.create(
|
||||||
|
name=e.name,
|
||||||
|
sort_name=e.sort_name,
|
||||||
|
platform=e.platform,
|
||||||
|
year_released=e.year_released,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("games", "0047_alter_edition_game"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="game",
|
||||||
|
name="platform",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_DEFAULT,
|
||||||
|
to="games.platform",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.RunPython(copy_platform_to_game),
|
||||||
|
]
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Generated by Django 5.1.5 on 2025-01-29 17:34
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('games', '0048_game_platform'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='game',
|
||||||
|
unique_together={('name', 'platform', 'year_released')},
|
||||||
|
),
|
||||||
|
]
|
|
@ -10,10 +10,17 @@ from common.time import format_duration
|
||||||
|
|
||||||
|
|
||||||
class Game(models.Model):
|
class Game(models.Model):
|
||||||
|
class Meta:
|
||||||
|
unique_together = [["name", "platform", "year_released"]]
|
||||||
|
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
sort_name = models.CharField(max_length=255, null=True, blank=True, default=None)
|
sort_name = models.CharField(max_length=255, null=True, blank=True, default=None)
|
||||||
year_released = models.IntegerField(null=True, blank=True, default=None)
|
year_released = models.IntegerField(null=True, blank=True, default=None)
|
||||||
wikidata = models.CharField(max_length=50, null=True, blank=True, default=None)
|
wikidata = models.CharField(max_length=50, null=True, blank=True, default=None)
|
||||||
|
platform = models.ForeignKey(
|
||||||
|
"Platform", on_delete=models.SET_DEFAULT, null=True, blank=True, default=None
|
||||||
|
)
|
||||||
|
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
session_average: float | int | timedelta | None
|
session_average: float | int | timedelta | None
|
||||||
|
|
Loading…
Reference in New Issue