From 80ea0de98343de1af3a92dc9748e0b3616c1a428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Hells=C3=A9n?= Date: Mon, 1 Jul 2024 19:47:15 +0200 Subject: [PATCH] Use django-auto-prefetch --- requirements.txt | 1 + ...ons_alter_dropcampaign_options_and_more.py | 171 ++++++++++++++++++ twitch_app/models.py | 32 ++-- 3 files changed, 190 insertions(+), 14 deletions(-) create mode 100644 twitch_app/migrations/0006_alter_dropbenefit_options_alter_dropcampaign_options_and_more.py diff --git a/requirements.txt b/requirements.txt index 78f0a01..aa50704 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ discord-webhook django-allauth[socialaccount] +django-auto-prefetch django-ninja django-simple-history django>=0.0.0.dev0 diff --git a/twitch_app/migrations/0006_alter_dropbenefit_options_alter_dropcampaign_options_and_more.py b/twitch_app/migrations/0006_alter_dropbenefit_options_alter_dropcampaign_options_and_more.py new file mode 100644 index 0000000..1544800 --- /dev/null +++ b/twitch_app/migrations/0006_alter_dropbenefit_options_alter_dropcampaign_options_and_more.py @@ -0,0 +1,171 @@ +# Generated by Django 5.0.6 on 2024-07-01 15:44 + +import auto_prefetch +import django.db.models.deletion +import django.db.models.manager +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("twitch_app", "0005_alter_dropbenefit_options_alter_dropcampaign_options_and_more"), + ] + + operations = [ + migrations.AlterModelOptions( + name="dropbenefit", + options={ + "base_manager_name": "prefetch_manager", + "ordering": ("name",), + "verbose_name": "Drop Benefit", + "verbose_name_plural": "Drop Benefits", + }, + ), + migrations.AlterModelOptions( + name="dropcampaign", + options={ + "base_manager_name": "prefetch_manager", + "ordering": ("name",), + "verbose_name": "Drop Campaign", + "verbose_name_plural": "Drop Campaigns", + }, + ), + migrations.AlterModelOptions( + name="game", + options={ + "base_manager_name": "prefetch_manager", + "ordering": ("display_name",), + "verbose_name": "Game", + "verbose_name_plural": "Games", + }, + ), + migrations.AlterModelOptions( + name="organization", + options={ + "base_manager_name": "prefetch_manager", + "ordering": ("name",), + "verbose_name": "Organization", + "verbose_name_plural": "Organizations", + }, + ), + migrations.AlterModelOptions( + name="timebaseddrop", + options={ + "base_manager_name": "prefetch_manager", + "ordering": ("name",), + "verbose_name": "Time-Based Drop", + "verbose_name_plural": "Time-Based Drops", + }, + ), + migrations.AlterModelManagers( + name="dropbenefit", + managers=[ + ("objects", django.db.models.manager.Manager()), + ("prefetch_manager", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="dropcampaign", + managers=[ + ("objects", django.db.models.manager.Manager()), + ("prefetch_manager", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="game", + managers=[ + ("objects", django.db.models.manager.Manager()), + ("prefetch_manager", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="organization", + managers=[ + ("objects", django.db.models.manager.Manager()), + ("prefetch_manager", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="timebaseddrop", + managers=[ + ("objects", django.db.models.manager.Manager()), + ("prefetch_manager", django.db.models.manager.Manager()), + ], + ), + migrations.AlterField( + model_name="dropbenefit", + name="game", + field=auto_prefetch.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="twitch_app.game"), + ), + migrations.AlterField( + model_name="dropbenefit", + name="owner_organization", + field=auto_prefetch.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="twitch_app.organization"), + ), + migrations.AlterField( + model_name="dropcampaign", + name="game", + field=auto_prefetch.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="drop_campaigns", + to="twitch_app.game", + ), + ), + migrations.AlterField( + model_name="dropcampaign", + name="owner", + field=auto_prefetch.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="drop_campaigns", + to="twitch_app.organization", + ), + ), + migrations.AlterField( + model_name="historicaldropbenefit", + name="game", + field=auto_prefetch.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to="twitch_app.game", + ), + ), + migrations.AlterField( + model_name="historicaldropbenefit", + name="owner_organization", + field=auto_prefetch.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to="twitch_app.organization", + ), + ), + migrations.AlterField( + model_name="historicaldropcampaign", + name="game", + field=auto_prefetch.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to="twitch_app.game", + ), + ), + migrations.AlterField( + model_name="historicaldropcampaign", + name="owner", + field=auto_prefetch.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to="twitch_app.organization", + ), + ), + ] diff --git a/twitch_app/models.py b/twitch_app/models.py index 8c9d061..4e6064e 100644 --- a/twitch_app/models.py +++ b/twitch_app/models.py @@ -1,3 +1,4 @@ +import auto_prefetch from django.contrib.humanize.templatetags.humanize import naturaltime from django.db import models from django.db.models import Value @@ -8,13 +9,13 @@ from django.utils import timezone from simple_history.models import HistoricalRecords -class Organization(models.Model): +class Organization(auto_prefetch.Model): id = models.TextField(primary_key=True) name = models.TextField(blank=True, null=True) added_at = models.DateTimeField(blank=True, null=True, auto_now_add=True) modified_at = models.DateTimeField(blank=True, null=True, auto_now=True) - class Meta: + class Meta(auto_prefetch.Model.Meta): verbose_name = "Organization" verbose_name_plural = "Organizations" ordering = ("name",) @@ -23,7 +24,7 @@ class Organization(models.Model): return self.name or self.id -class Game(models.Model): +class Game(auto_prefetch.Model): id = models.TextField(primary_key=True) slug = models.TextField(blank=True, null=True) twitch_url = models.GeneratedField( # type: ignore # noqa: PGH003 @@ -45,7 +46,7 @@ class Game(models.Model): modified_at = models.DateTimeField(blank=True, null=True, auto_now=True) history = HistoricalRecords() - class Meta: + class Meta(auto_prefetch.Model.Meta): verbose_name = "Game" verbose_name_plural = "Games" ordering = ("display_name",) @@ -54,20 +55,23 @@ class Game(models.Model): return self.display_name or self.slug or self.id -class DropBenefit(models.Model): +class DropBenefit(auto_prefetch.Model): id = models.TextField(primary_key=True) created_at = models.DateTimeField(blank=True, null=True) entitlement_limit = models.IntegerField(blank=True, null=True) image_asset_url = models.URLField(blank=True, null=True) is_ios_available = models.BooleanField(blank=True, null=True) name = models.TextField(blank=True, null=True) - owner_organization = models.ForeignKey(Organization, on_delete=models.CASCADE) - game = models.ForeignKey(Game, on_delete=models.CASCADE) + owner_organization = auto_prefetch.ForeignKey( + Organization, + on_delete=models.CASCADE, + ) + game = auto_prefetch.ForeignKey(Game, on_delete=models.CASCADE) added_at = models.DateTimeField(blank=True, null=True, auto_now_add=True) modified_at = models.DateTimeField(blank=True, null=True, auto_now=True) history = HistoricalRecords() - class Meta: + class Meta(auto_prefetch.Model.Meta): verbose_name = "Drop Benefit" verbose_name_plural = "Drop Benefits" ordering = ("name",) @@ -76,7 +80,7 @@ class DropBenefit(models.Model): return f"{self.owner_organization.name} - {self.game.display_name} - {self.name}" -class TimeBasedDrop(models.Model): +class TimeBasedDrop(auto_prefetch.Model): id = models.TextField(primary_key=True) required_subs = models.IntegerField(blank=True, null=True) end_at = models.DateTimeField(blank=True, null=True) @@ -88,7 +92,7 @@ class TimeBasedDrop(models.Model): modified_at = models.DateTimeField(blank=True, null=True, auto_now=True) history = HistoricalRecords() - class Meta: + class Meta(auto_prefetch.Model.Meta): verbose_name = "Time-Based Drop" verbose_name_plural = "Time-Based Drops" ordering = ("name",) @@ -101,7 +105,7 @@ class TimeBasedDrop(models.Model): return f"{self.benefits.first()} - {self.name}" -class DropCampaign(models.Model): +class DropCampaign(auto_prefetch.Model): id = models.TextField(primary_key=True) account_link_url = models.URLField(blank=True, null=True) description = models.TextField(blank=True, null=True) @@ -111,12 +115,12 @@ class DropCampaign(models.Model): name = models.TextField(blank=True, null=True) start_at = models.DateTimeField(blank=True, null=True) status = models.TextField(blank=True, null=True) - game = models.ForeignKey( + game = auto_prefetch.ForeignKey( Game, on_delete=models.CASCADE, related_name="drop_campaigns", ) - owner = models.ForeignKey( + owner = auto_prefetch.ForeignKey( Organization, on_delete=models.CASCADE, related_name="drop_campaigns", @@ -126,7 +130,7 @@ class DropCampaign(models.Model): modified_at = models.DateTimeField(blank=True, null=True, auto_now=True) history = HistoricalRecords() - class Meta: + class Meta(auto_prefetch.Model.Meta): verbose_name = "Drop Campaign" verbose_name_plural = "Drop Campaigns" ordering = ("name",)