message style safely deletes without setting null
All checks were successful
Build and Push Docker Image / build (push) Successful in 15s

will set the related subscription to use the default instead
This commit is contained in:
Corban-Lee Jones 2024-10-15 20:15:54 +01:00
parent 9f18ae3f13
commit 1cd1199e28
3 changed files with 32 additions and 2 deletions

View File

@ -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()

View File

@ -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'),
),
]

View File

@ -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: