From ba00ebecc1c9e15494388c319397c6638ed03e05 Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Tue, 12 Nov 2024 15:29:32 -0400 Subject: [PATCH] feat: add database constraint file_id_or_uri on PlaylistEntry --- .../0126_playlistentry_file_id_or_uri.py | 24 +++++++++++++++++++ program/models.py | 8 +++++++ 2 files changed, 32 insertions(+) create mode 100644 program/migrations/0126_playlistentry_file_id_or_uri.py diff --git a/program/migrations/0126_playlistentry_file_id_or_uri.py b/program/migrations/0126_playlistentry_file_id_or_uri.py new file mode 100644 index 00000000..d5075432 --- /dev/null +++ b/program/migrations/0126_playlistentry_file_id_or_uri.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.16 on 2024-11-12 19:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("program", "0125_alter_playlistentry_duration"), + ] + + operations = [ + migrations.AddConstraint( + model_name="playlistentry", + constraint=models.CheckConstraint( + check=models.Q( + ("file_id__isnull", False), + models.Q(("uri", ""), _negated=True), + _connector="OR", + ), + name="file-id-or-uri", + ), + ), + ] diff --git a/program/models.py b/program/models.py index a3df5d49..55d40330 100644 --- a/program/models.py +++ b/program/models.py @@ -619,6 +619,14 @@ class PlaylistEntry(models.Model): playlist = models.ForeignKey(Playlist, on_delete=models.CASCADE, related_name="entries") uri = models.CharField(blank=True, max_length=1024) + class Meta: + constraints = [ + models.CheckConstraint( + check=Q(file_id__isnull=False) | ~Q(uri=""), + name="file-id-or-uri", + ) + ] + def __str__(self): return f"{self.uri} - {self.duration}" if self.duration else self.uri -- GitLab