diff --git a/apps/api/serializers.py b/apps/api/serializers.py index 6d6706c..bf8ecc4 100644 --- a/apps/api/serializers.py +++ b/apps/api/serializers.py @@ -243,6 +243,11 @@ class SubscriptionSerializer(DynamicModelSerializer): ) channels_detail = serializers.SerializerMethodField() filters_detail = serializers.SerializerMethodField() + message_style = serializers.PrimaryKeyRelatedField( + queryset=MessageStyle.objects.all(), + required=True, + allow_null=False + ) message_style_detail = serializers.SerializerMethodField() unique_rules_detail = serializers.SerializerMethodField() diff --git a/apps/home/migrations/0015_alter_subscription_message_style.py b/apps/home/migrations/0015_alter_subscription_message_style.py new file mode 100644 index 0000000..f0f880a --- /dev/null +++ b/apps/home/migrations/0015_alter_subscription_message_style.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.4 on 2024-10-15 18:30 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0014_alter_discordchannel_id_alter_server_id'), + ] + + operations = [ + migrations.AlterField( + model_name='subscription', + name='message_style', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='home.messagestyle'), + ), + ] diff --git a/apps/home/models.py b/apps/home/models.py index 6354499..8e7729b 100644 --- a/apps/home/models.py +++ b/apps/home/models.py @@ -150,7 +150,13 @@ class MessageStyle(models.Model): if self.auto_created: raise ValidationError("Cannot delete 'MessageStyle' instance with 'auto_created=True'") - super().delete() + # If this style is being used, reset the users to the default style + default_message_style = MessageStyle.objects.get(server=self.server, auto_created=True) + Subscription.objects \ + .filter(server=self.server, message_style=self) \ + .update(message_style=default_message_style) + + super().delete(*args, **kwargs) def __str__(self): return self.name @@ -240,7 +246,7 @@ class Subscription(models.Model): publish_threshold = models.DateTimeField(default=timezone.now) channels = models.ManyToManyField(to=DiscordChannel, related_name="subscriptions", blank=False) filters = models.ManyToManyField(to=ContentFilter, blank=True) - message_style = models.ForeignKey(to=MessageStyle, on_delete=models.SET_NULL, null=True, blank=True) + message_style = models.ForeignKey(to=MessageStyle, on_delete=models.SET_NULL, null=True, blank=False) unique_rules = models.ManyToManyField(to=UniqueContentRule, blank=False) class Meta: