Currently I have this “on create“ and “on delete“, “on create“ works fine, but “on delete“ only works when models are deleted one by one and not when deleted in bulk. Is there a way to make the custom action work when deleting in bulk? (deleting in bulk means, for example: in admin, when selecting multiple objects and clicking delete selected objects)
class AnalyticsTimestamp(models.Model):
metric = models.ForeignKey(AnalyticsMetric, on_delete=models.CASCADE, related_name='timestamps')
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name='analytics_timestamps')
date = models.DateTimeField(auto_now_add=True)
resolved = models.BooleanField(default=False)
def resolve(self): # If the issue of the user was resolved lower the priority, so the user is no longer in top users and no longer asked if they have any problem
self.user.priority -= self.metric.priority
self.user.save()
self.resolved = True
self.save()
def save(self, *args, **kwargs):
if not self.pk: # on creation
now_date = timezone.now().date()
self.user.priority += self.metric.priority
self.user.save()
daily, _ = AnalyticsDaily.objects.get_or_create(metric=self.metric, date=date(now_date.year, now_date.month, now_date.day))
daily.value += 1
daily.save()
monthly, _ = AnalyticsMonthly.objects.get_or_create(metric=self.metric, date=date(now_date.year, now_date.month, 1))
monthly.value += 1
monthly.save()
super().save(*args, **kwargs)
def delete(self, *args, **kwargs):
if not self.resolved: # decrement user priority on model delete if problem of the user hasn't resolved, but timestamp is being deleted
self.user.priority -= self.metric.priority
self.user.save()
super().delete(*args, **kwargs)