Colin Powell 3 лет назад
Родитель
Сommit
c25fad2a07
2 измененных файлов с 71 добавлено и 1 удалено
  1. 34 0
      games/migrations/0015_gamecollection.py
  2. 37 1
      games/models.py

+ 34 - 0
games/migrations/0015_gamecollection.py

@@ -0,0 +1,34 @@
+# Generated by Django 4.0.4 on 2022-04-13 01:07
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django_extensions.db.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('games', '0014_alter_developer_options_alter_game_options_and_more'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='GameCollection',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')),
+                ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')),
+                ('name', models.CharField(max_length=255)),
+                ('slug', django_extensions.db.fields.AutoSlugField(blank=True, editable=False, populate_from='name')),
+                ('developer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='games.developer')),
+                ('game_system', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='games.gamesystem')),
+                ('games', models.ManyToManyField(to='games.game')),
+                ('genre', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='games.genre')),
+                ('publisher', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='games.publisher')),
+            ],
+            options={
+                'ordering': ['name'],
+                'abstract': False,
+            },
+        ),
+    ]

+ 37 - 1
games/models.py

@@ -64,7 +64,6 @@ class StatisticsMixin(models.Model):
             return int(100 * avg)
         return 0
 
-
 class Genre(BaseModel, StatisticsMixin):
     def get_absolute_url(self):
         return reverse("games:genre_detail", args=[self.slug])
@@ -268,3 +267,40 @@ class Game(BaseModel):
         if emulator == "PCSX2":
             cmd = f"{emulator} --console --fullscreen --nogui {rom_file}"
         return cmd
+
+class GameCollection(BaseModel):
+    games = models.ManyToManyField(Game)
+    game_system = models.ForeignKey(
+        GameSystem,
+        on_delete=models.SET_NULL,
+        null=True,
+    )
+    developer = models.ForeignKey(
+        Developer,
+        on_delete=models.SET_NULL,
+        blank=True,
+        null=True,
+    )
+    publisher = models.ForeignKey(
+        Publisher,
+        on_delete=models.SET_NULL,
+        blank=True,
+        null=True,
+    )
+    genre = models.ForeignKey(
+        Genre,
+        on_delete=models.SET_NULL,
+        null=True,
+    )
+
+    def export_to_file(self, dryrun=True):
+        """Will dump this collection to a .cfg file in /tmp or
+        our COLLECTIONS_DIR configured path if dryrun=False"""
+
+        file_path = f"/tmp/custom-{collection.slug}.cfg"
+        if not dryrun:
+            file_path = os.path.join(settings.COLLECTIONS_DIR, "custom-{collection.slug}.cfg")
+
+        with open(file_path, "a") as outfile:
+            for game in self.game_set.all():
+                outfile.write(game.rom_file.path)