|
18 | 18 | import hyperlink |
19 | 19 | import vobject |
20 | 20 | from asteval import Interpreter |
| 21 | +from auditlog.models import LogEntry |
21 | 22 | from cryptography.hazmat.backends import default_backend |
22 | 23 | from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes |
23 | 24 | from dateutil.parser import parse |
24 | 25 | from dateutil.relativedelta import MO, SU, relativedelta |
25 | 26 | from django.conf import settings |
26 | 27 | from django.contrib import messages |
27 | 28 | from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed |
| 29 | +from django.contrib.contenttypes.models import ContentType |
28 | 30 | from django.core.exceptions import ValidationError |
29 | 31 | from django.core.paginator import Paginator |
30 | 32 | from django.db.models import Case, Count, IntegerField, Q, Sum, Value, When |
@@ -2333,6 +2335,15 @@ def delete_chunk(self, objects, **kwargs): |
2333 | 2335 | logger.debug("ASYNC_DELETE: object has already been deleted elsewhere. Skipping") |
2334 | 2336 | # The id must be None |
2335 | 2337 | # The object has already been deleted elsewhere |
| 2338 | + except LogEntry.MultipleObjectsReturned: |
| 2339 | + # Delete the log entrys first, then delete |
| 2340 | + LogEntry.objects.filter( |
| 2341 | + content_type=ContentType.objects.get_for_model(obj.__class__), |
| 2342 | + object_pk=str(obj.pk), |
| 2343 | + action=LogEntry.Action.DELETE, |
| 2344 | + ).delete() |
| 2345 | + # Now delete the object again |
| 2346 | + obj.delete() |
2336 | 2347 |
|
2337 | 2348 | @dojo_async_task |
2338 | 2349 | @app.task |
|
0 commit comments