django-bulk-hooks 0.1.182__tar.gz → 0.1.183__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of django-bulk-hooks might be problematic. Click here for more details.
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/PKG-INFO +1 -1
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/queryset.py +20 -28
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/pyproject.toml +1 -1
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/LICENSE +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/README.md +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/__init__.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/conditions.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/constants.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/context.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/decorators.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/engine.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/enums.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/handler.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/manager.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/models.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/priority.py +0 -0
- {django_bulk_hooks-0.1.182 → django_bulk_hooks-0.1.183}/django_bulk_hooks/registry.py +0 -0
|
@@ -14,6 +14,7 @@ from django_bulk_hooks.constants import (
|
|
|
14
14
|
VALIDATE_UPDATE,
|
|
15
15
|
)
|
|
16
16
|
from django_bulk_hooks.context import HookContext
|
|
17
|
+
from django.db.models import When, Value, Case
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
class HookQuerySet(models.QuerySet):
|
|
@@ -554,35 +555,26 @@ class HookQuerySet(models.QuerySet):
|
|
|
554
555
|
if not model_fields:
|
|
555
556
|
continue
|
|
556
557
|
|
|
557
|
-
#
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
558
|
+
# Use Django's update() with CASE statements for bulk update
|
|
559
|
+
pks = [obj.pk for obj in objs]
|
|
560
|
+
|
|
561
|
+
if pks:
|
|
562
|
+
base_qs = model._base_manager.using(self.db)
|
|
562
563
|
|
|
563
|
-
#
|
|
564
|
-
|
|
565
|
-
pk_value = obj.pk
|
|
566
|
-
setattr(temp_obj, pk_field.attname, pk_value)
|
|
567
|
-
|
|
568
|
-
# Also set the pk property for compatibility
|
|
569
|
-
temp_obj.pk = pk_value
|
|
570
|
-
|
|
571
|
-
# Mark the object as not being added (it's an existing object)
|
|
572
|
-
temp_obj._state.adding = False
|
|
573
|
-
temp_obj._state.db = self.db
|
|
574
|
-
|
|
575
|
-
# Copy only the fields for this model
|
|
564
|
+
# Build CASE statements for each field
|
|
565
|
+
case_statements = {}
|
|
576
566
|
for field_name in model_fields:
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
567
|
+
field = model._meta.get_field(field_name)
|
|
568
|
+
when_statements = []
|
|
569
|
+
|
|
570
|
+
for pk, obj in zip(pks, objs):
|
|
571
|
+
value = getattr(obj, field_name)
|
|
572
|
+
when_statements.append(When(pk=pk, then=Value(value, output_field=field)))
|
|
573
|
+
|
|
574
|
+
case_statements[field_name] = Case(*when_statements, output_field=field)
|
|
575
|
+
|
|
576
|
+
# Execute the update
|
|
577
|
+
updated_count = base_qs.filter(pk__in=pks).update(**case_statements)
|
|
578
|
+
total_updated += updated_count
|
|
587
579
|
|
|
588
580
|
return total_updated
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "django-bulk-hooks"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.183"
|
|
4
4
|
description = "Hook-style hooks for Django bulk operations like bulk_create and bulk_update."
|
|
5
5
|
authors = ["Konrad Beck <konrad.beck@merchantcapital.co.za>"]
|
|
6
6
|
readme = "README.md"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|