Просмотр исходного кода

Add signals, update model to don't delete agreement together with creator

Rafał Pitoń 6 лет назад
Родитель
Сommit
1fe4be1d1c

+ 3 - 0
misago/legal/apps.py

@@ -5,3 +5,6 @@ class MisagoLegalConfig(AppConfig):
     name = 'misago.legal'
     label = 'misago_legal'
     verbose_name = "Misago Legal"
+
+    def ready(self):
+        from . import signals as _

+ 2 - 2
misago/legal/migrations/0002_agreement_useragreement.py

@@ -31,8 +31,8 @@ class Migration(migrations.Migration):
                 ('created_by_name', models.CharField(blank=True, max_length=255, null=True)),
                 ('last_modified_on', models.DateTimeField(blank=True, null=True)),
                 ('last_modified_by_name', models.CharField(blank=True, max_length=255, null=True)),
-                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)),
-                ('last_modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)),
+                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
+                ('last_modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
             ],
         ),
         migrations.CreateModel(

+ 2 - 0
misago/legal/models.py

@@ -55,6 +55,7 @@ class Agreement(models.Model):
     created_on = models.DateTimeField(default=timezone.now)
     created_by = models.ForeignKey(
         settings.AUTH_USER_MODEL,
+        on_delete=models.SET_NULL,
         blank=True,
         null=True,
         related_name='+',
@@ -63,6 +64,7 @@ class Agreement(models.Model):
     last_modified_on = models.DateTimeField(null=True, blank=True)
     last_modified_by = models.ForeignKey(
         settings.AUTH_USER_MODEL,
+        on_delete=models.SET_NULL,
         blank=True,
         null=True,
         related_name='+',

+ 16 - 0
misago/legal/signals.py

@@ -0,0 +1,16 @@
+from django.dispatch import receiver
+
+from misago.users.signals import anonymize_user_data, username_changed
+
+from .models import Agreement
+
+
+@receiver([anonymize_user_data, username_changed])
+def update_usernames(sender, **kwargs):
+    Agreement.objects.filter(created_by=sender).update(
+        created_by_name=sender.username,
+    )
+
+    Agreement.objects.filter(last_modified_by=sender).update(
+        last_modified_by_name=sender.username,
+    )