From e1c108180b76cb5cf439d8937339a7b2d844c0c8 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 15 May 2026 13:27:19 +0800 Subject: [PATCH 01/14] new_ --- db/models.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ main.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 99 insertions(+), 4 deletions(-) diff --git a/db/models.py b/db/models.py index 137941ffa..ef71f080f 100644 --- a/db/models.py +++ b/db/models.py @@ -1 +1,53 @@ +# db/models.py + from django.db import models + + +class Race(models.Model): + name = models.CharField(max_length=255, unique=True) + description = models.TextField(blank=True) + + def __str__(self): + return self.name + + +class Skill(models.Model): + name = models.CharField(max_length=255, unique=True) + bonus = models.CharField(max_length=255) + race = models.ForeignKey( + Race, + on_delete=models.CASCADE, + related_name="skills" + ) + + def __str__(self): + return self.name + + +class Guild(models.Model): + name = models.CharField(max_length=255, unique=True) + description = models.TextField(null=True) + + def __str__(self): + return self.name + + +class Player(models.Model): + nickname = models.CharField(max_length=255, unique=True) + email = models.EmailField(max_length=255) + bio = models.CharField(max_length=255) + race = models.ForeignKey( + Race, + on_delete=models.CASCADE, + related_name="players" + ) + guild = models.ForeignKey( + Guild, + on_delete=models.SET_NULL, + null=True, + related_name="players" + ) + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return self.nickname diff --git a/main.py b/main.py index e71f55d89..8bf282626 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,53 @@ -import init_django_orm # noqa: F401 +# main.py -from db.models import Race, Skill, Player, Guild +import json +from db.models import Race, Skill, Guild, Player -def main() -> None: - pass + +def main(): + with open("players.json", "r") as file: + players_data = json.load(file) + + for player_data in players_data: + race_data = player_data["race"] + + race, _ = Race.objects.get_or_create( + name=race_data["name"], + defaults={ + "description": race_data.get("description", "") + } + ) + + for skill_data in race_data.get("skills", []): + Skill.objects.get_or_create( + name=skill_data["name"], + defaults={ + "bonus": skill_data["bonus"], + "race": race + } + ) + + guild = None + guild_data = player_data.get("guild") + + if guild_data: + guild, _ = Guild.objects.get_or_create( + name=guild_data["name"], + defaults={ + "description": guild_data.get("description") + } + ) + + Player.objects.get_or_create( + nickname=player_data["nickname"], + defaults={ + "email": player_data["email"], + "bio": player_data["bio"], + "race": race, + "guild": guild + } + ) if __name__ == "__main__": From 970e3e30726a99e1aacafccccd80eb7ffe7cf6d0 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:26:21 +0800 Subject: [PATCH 02/14] fix flake8 --- db/models.py | 8 ++-- main.py | 107 +++++++++++++++++++++++++-------------------------- 2 files changed, 57 insertions(+), 58 deletions(-) diff --git a/db/models.py b/db/models.py index ef71f080f..68a9bb4af 100644 --- a/db/models.py +++ b/db/models.py @@ -7,7 +7,7 @@ class Race(models.Model): name = models.CharField(max_length=255, unique=True) description = models.TextField(blank=True) - def __str__(self): + def __str__(self) -> str: return self.name @@ -20,7 +20,7 @@ class Skill(models.Model): related_name="skills" ) - def __str__(self): + def __str__(self) -> str: return self.name @@ -28,7 +28,7 @@ class Guild(models.Model): name = models.CharField(max_length=255, unique=True) description = models.TextField(null=True) - def __str__(self): + def __str__(self) -> str: return self.name @@ -49,5 +49,5 @@ class Player(models.Model): ) created_at = models.DateTimeField(auto_now_add=True) - def __str__(self): + def __str__(self) -> str: return self.nickname diff --git a/main.py b/main.py index 8bf282626..e2379f63d 100644 --- a/main.py +++ b/main.py @@ -1,54 +1,53 @@ -# main.py - -import json - -from db.models import Race, Skill, Guild, Player - - -def main(): - with open("players.json", "r") as file: - players_data = json.load(file) - - for player_data in players_data: - race_data = player_data["race"] - - race, _ = Race.objects.get_or_create( - name=race_data["name"], - defaults={ - "description": race_data.get("description", "") - } - ) - - for skill_data in race_data.get("skills", []): - Skill.objects.get_or_create( - name=skill_data["name"], - defaults={ - "bonus": skill_data["bonus"], - "race": race - } - ) - - guild = None - guild_data = player_data.get("guild") - - if guild_data: - guild, _ = Guild.objects.get_or_create( - name=guild_data["name"], - defaults={ - "description": guild_data.get("description") - } - ) - - Player.objects.get_or_create( - nickname=player_data["nickname"], - defaults={ - "email": player_data["email"], - "bio": player_data["bio"], - "race": race, - "guild": guild - } - ) - - -if __name__ == "__main__": - main() +def main() -> None: + +from django.db import models + + +class Race(models.Model): + name = models.CharField(max_length=255, unique=True) + description = models.TextField(blank=True) + + def __str__(self) -> str: + return self.name + + +class Skill(models.Model): + name = models.CharField(max_length=255, unique=True) + bonus = models.CharField(max_length=255) + race = models.ForeignKey( + Race, + on_delete=models.CASCADE, + related_name="skills" + ) + + def __str__(self) -> str: + return self.name + + +class Guild(models.Model): + name = models.CharField(max_length=255, unique=True) + description = models.TextField(null=True) + + def __str__(self) -> str: + return self.name + + +class Player(models.Model): + nickname = models.CharField(max_length=255, unique=True) + email = models.EmailField(max_length=255) + bio = models.CharField(max_length=255) + race = models.ForeignKey( + Race, + on_delete=models.CASCADE, + related_name="players" + ) + guild = models.ForeignKey( + Guild, + on_delete=models.SET_NULL, + null=True, + related_name="players" + ) + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self) -> str: + return self.nickname From e6a1de94ecc4474bba252b80137ce054afdf1713 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:28:30 +0800 Subject: [PATCH 03/14] fix indentation --- main.py | 99 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 49 insertions(+), 50 deletions(-) diff --git a/main.py b/main.py index e2379f63d..ffb3f74e3 100644 --- a/main.py +++ b/main.py @@ -1,53 +1,52 @@ -def main() -> None: - -from django.db import models - - -class Race(models.Model): - name = models.CharField(max_length=255, unique=True) - description = models.TextField(blank=True) - - def __str__(self) -> str: - return self.name - +import json -class Skill(models.Model): - name = models.CharField(max_length=255, unique=True) - bonus = models.CharField(max_length=255) - race = models.ForeignKey( - Race, - on_delete=models.CASCADE, - related_name="skills" - ) +from db.models import Race, Skill, Guild, Player - def __str__(self) -> str: - return self.name - -class Guild(models.Model): - name = models.CharField(max_length=255, unique=True) - description = models.TextField(null=True) - - def __str__(self) -> str: - return self.name - - -class Player(models.Model): - nickname = models.CharField(max_length=255, unique=True) - email = models.EmailField(max_length=255) - bio = models.CharField(max_length=255) - race = models.ForeignKey( - Race, - on_delete=models.CASCADE, - related_name="players" - ) - guild = models.ForeignKey( - Guild, - on_delete=models.SET_NULL, - null=True, - related_name="players" - ) - created_at = models.DateTimeField(auto_now_add=True) - - def __str__(self) -> str: - return self.nickname +def main() -> None: + with open("players.json", "r") as file: + players_data = json.load(file) + + for player_data in players_data: + race_data = player_data["race"] + + race, _ = Race.objects.get_or_create( + name=race_data["name"], + defaults={ + "description": race_data.get("description", "") + } + ) + + for skill_data in race_data.get("skills", []): + Skill.objects.get_or_create( + name=skill_data["name"], + defaults={ + "bonus": skill_data["bonus"], + "race": race + } + ) + + guild = None + guild_data = player_data.get("guild") + + if guild_data: + guild, _ = Guild.objects.get_or_create( + name=guild_data["name"], + defaults={ + "description": guild_data.get("description") + } + ) + + Player.objects.get_or_create( + nickname=player_data["nickname"], + defaults={ + "email": player_data["email"], + "bio": player_data["bio"], + "race": race, + "guild": guild + } + ) + + +if __name__ == "__main__": + main() From eb2ca4869d40cd3ba94cd5f35d973d2a46f0d9ee Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:31:38 +0800 Subject: [PATCH 04/14] fix json parsing --- db/models.py | 9 ++++++--- main.py | 24 +++++++++++++----------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/db/models.py b/db/models.py index 68a9bb4af..9b42f98dd 100644 --- a/db/models.py +++ b/db/models.py @@ -17,7 +17,7 @@ class Skill(models.Model): race = models.ForeignKey( Race, on_delete=models.CASCADE, - related_name="skills" + related_name="skills", ) def __str__(self) -> str: @@ -36,17 +36,20 @@ class Player(models.Model): nickname = models.CharField(max_length=255, unique=True) email = models.EmailField(max_length=255) bio = models.CharField(max_length=255) + race = models.ForeignKey( Race, on_delete=models.CASCADE, - related_name="players" + related_name="players", ) + guild = models.ForeignKey( Guild, on_delete=models.SET_NULL, null=True, - related_name="players" + related_name="players", ) + created_at = models.DateTimeField(auto_now_add=True) def __str__(self) -> str: diff --git a/main.py b/main.py index ffb3f74e3..02f099a8a 100644 --- a/main.py +++ b/main.py @@ -1,20 +1,22 @@ +# main.py + import json -from db.models import Race, Skill, Guild, Player +from db.models import Guild, Player, Race, Skill def main() -> None: with open("players.json", "r") as file: - players_data = json.load(file) + data = json.load(file) - for player_data in players_data: + for player_data in data["players"]: race_data = player_data["race"] race, _ = Race.objects.get_or_create( name=race_data["name"], defaults={ - "description": race_data.get("description", "") - } + "description": race_data.get("description", ""), + }, ) for skill_data in race_data.get("skills", []): @@ -22,8 +24,8 @@ def main() -> None: name=skill_data["name"], defaults={ "bonus": skill_data["bonus"], - "race": race - } + "race": race, + }, ) guild = None @@ -33,8 +35,8 @@ def main() -> None: guild, _ = Guild.objects.get_or_create( name=guild_data["name"], defaults={ - "description": guild_data.get("description") - } + "description": guild_data.get("description"), + }, ) Player.objects.get_or_create( @@ -43,8 +45,8 @@ def main() -> None: "email": player_data["email"], "bio": player_data["bio"], "race": race, - "guild": guild - } + "guild": guild, + }, ) From 6aafe4c931cb79e6c3b1518a6528cfa430759305 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:33:42 +0800 Subject: [PATCH 05/14] fix main --- main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 02f099a8a..bd23f5e6a 100644 --- a/main.py +++ b/main.py @@ -7,9 +7,9 @@ def main() -> None: with open("players.json", "r") as file: - data = json.load(file) + players_data = json.load(file) - for player_data in data["players"]: + for player_data in players_data: race_data = player_data["race"] race, _ = Race.objects.get_or_create( From 36c33287b4fb702c24e056092f89b1a26681e5ff Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:35:35 +0800 Subject: [PATCH 06/14] fix json structure --- main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index bd23f5e6a..2d56533b3 100644 --- a/main.py +++ b/main.py @@ -7,7 +7,9 @@ def main() -> None: with open("players.json", "r") as file: - players_data = json.load(file) + data = json.load(file) + + players_data = data.get("players", data) for player_data in players_data: race_data = player_data["race"] From 5e40ebe9133d8be325e58e49e581b9711de422d5 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:37:39 +0800 Subject: [PATCH 07/14] fix players parsing --- main.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 2d56533b3..98538d1e6 100644 --- a/main.py +++ b/main.py @@ -9,7 +9,10 @@ def main() -> None: with open("players.json", "r") as file: data = json.load(file) - players_data = data.get("players", data) + players_data = data["players"] + + if isinstance(players_data, dict): + players_data = players_data.values() for player_data in players_data: race_data = player_data["race"] From 5b92cff7acea8395571ccdf415d3592056d9766c Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:39:50 +0800 Subject: [PATCH 08/14] fix json parsing universally --- main.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 98538d1e6..321947423 100644 --- a/main.py +++ b/main.py @@ -9,10 +9,13 @@ def main() -> None: with open("players.json", "r") as file: data = json.load(file) - players_data = data["players"] + if isinstance(data, dict): + players_data = data.get("players", []) - if isinstance(players_data, dict): - players_data = players_data.values() + if isinstance(players_data, dict): + players_data = players_data.values() + else: + players_data = data for player_data in players_data: race_data = player_data["race"] From ed03ba40566c23181b5fd54c8f803fc71cf351bd Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:44:13 +0800 Subject: [PATCH 09/14] add migrations --- db/migrations/0001_initial.py | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 db/migrations/0001_initial.py diff --git a/db/migrations/0001_initial.py b/db/migrations/0001_initial.py new file mode 100644 index 000000000..c201e1842 --- /dev/null +++ b/db/migrations/0001_initial.py @@ -0,0 +1,52 @@ +# Generated by Django 6.0.4 on 2026-05-19 00:43 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Guild', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, unique=True)), + ('description', models.TextField(null=True)), + ], + ), + migrations.CreateModel( + name='Race', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, unique=True)), + ('description', models.TextField(blank=True)), + ], + ), + migrations.CreateModel( + name='Player', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nickname', models.CharField(max_length=255, unique=True)), + ('email', models.EmailField(max_length=255)), + ('bio', models.CharField(max_length=255)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('guild', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='players', to='db.guild')), + ('race', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='players', to='db.race')), + ], + ), + migrations.CreateModel( + name='Skill', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, unique=True)), + ('bonus', models.CharField(max_length=255)), + ('race', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='skills', to='db.race')), + ], + ), + ] From e267dc6510479a5942d3eb14820fb477ffa79580 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:46:24 +0800 Subject: [PATCH 10/14] fix main logic --- main.py | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/main.py b/main.py index 321947423..4070a13bf 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,3 @@ -# main.py - import json from db.models import Guild, Player, Race, Skill @@ -7,15 +5,7 @@ def main() -> None: with open("players.json", "r") as file: - data = json.load(file) - - if isinstance(data, dict): - players_data = data.get("players", []) - - if isinstance(players_data, dict): - players_data = players_data.values() - else: - players_data = data + players_data = json.load(file) for player_data in players_data: race_data = player_data["race"] @@ -23,11 +13,11 @@ def main() -> None: race, _ = Race.objects.get_or_create( name=race_data["name"], defaults={ - "description": race_data.get("description", ""), + "description": race_data["description"], }, ) - for skill_data in race_data.get("skills", []): + for skill_data in race_data["skills"]: Skill.objects.get_or_create( name=skill_data["name"], defaults={ @@ -39,7 +29,7 @@ def main() -> None: guild = None guild_data = player_data.get("guild") - if guild_data: + if guild_data is not None: guild, _ = Guild.objects.get_or_create( name=guild_data["name"], defaults={ From b5bfd3686c5bdc794874e084a38356f955b3bfd6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:48:49 +0800 Subject: [PATCH 11/14] fix players json --- main.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 4070a13bf..9ddbabcbd 100644 --- a/main.py +++ b/main.py @@ -5,7 +5,9 @@ def main() -> None: with open("players.json", "r") as file: - players_data = json.load(file) + data = json.load(file) + + players_data = data["players"] for player_data in players_data: race_data = player_data["race"] @@ -29,7 +31,7 @@ def main() -> None: guild = None guild_data = player_data.get("guild") - if guild_data is not None: + if guild_data: guild, _ = Guild.objects.get_or_create( name=guild_data["name"], defaults={ From 6d07ef4bc3c1f59b7e653ee495b598f5e6f9210f Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:51:19 +0800 Subject: [PATCH 12/14] fix json parsing --- main.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 9ddbabcbd..480c2ae90 100644 --- a/main.py +++ b/main.py @@ -7,7 +7,10 @@ def main() -> None: with open("players.json", "r") as file: data = json.load(file) - players_data = data["players"] + if isinstance(data, list): + players_data = data + else: + players_data = data.get("players", []) for player_data in players_data: race_data = player_data["race"] @@ -15,11 +18,11 @@ def main() -> None: race, _ = Race.objects.get_or_create( name=race_data["name"], defaults={ - "description": race_data["description"], + "description": race_data.get("description", ""), }, ) - for skill_data in race_data["skills"]: + for skill_data in race_data.get("skills", []): Skill.objects.get_or_create( name=skill_data["name"], defaults={ From 3a819eeeb66ca92a138a1b7538072ccfff6ad6eb Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:54:04 +0800 Subject: [PATCH 13/14] fix main --- main.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index 480c2ae90..2d23d0f65 100644 --- a/main.py +++ b/main.py @@ -7,10 +7,10 @@ def main() -> None: with open("players.json", "r") as file: data = json.load(file) - if isinstance(data, list): - players_data = data - else: - players_data = data.get("players", []) + players_data = data + + if isinstance(data, dict): + players_data = data.values() for player_data in players_data: race_data = player_data["race"] From 64ce746d0f459a55d16db88b4e650da26681e915 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 13:58:08 +0800 Subject: [PATCH 14/14] fixed_test --- main.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/main.py b/main.py index 2d23d0f65..8c55ff014 100644 --- a/main.py +++ b/main.py @@ -5,14 +5,9 @@ def main() -> None: with open("players.json", "r") as file: - data = json.load(file) + players_data = json.load(file) - players_data = data - - if isinstance(data, dict): - players_data = data.values() - - for player_data in players_data: + for nickname, player_data in players_data.items(): race_data = player_data["race"] race, _ = Race.objects.get_or_create( @@ -43,7 +38,7 @@ def main() -> None: ) Player.objects.get_or_create( - nickname=player_data["nickname"], + nickname=nickname, defaults={ "email": player_data["email"], "bio": player_data["bio"],