django-bulk-hooks 0.2.27__py3-none-any.whl → 0.2.28__py3-none-any.whl
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/operations/bulk_executor.py +4 -39
- {django_bulk_hooks-0.2.27.dist-info → django_bulk_hooks-0.2.28.dist-info}/METADATA +1 -1
- {django_bulk_hooks-0.2.27.dist-info → django_bulk_hooks-0.2.28.dist-info}/RECORD +5 -5
- {django_bulk_hooks-0.2.27.dist-info → django_bulk_hooks-0.2.28.dist-info}/LICENSE +0 -0
- {django_bulk_hooks-0.2.27.dist-info → django_bulk_hooks-0.2.28.dist-info}/WHEEL +0 -0
|
@@ -455,58 +455,23 @@ class BulkExecutor:
|
|
|
455
455
|
case_statements = {}
|
|
456
456
|
for field_name in field_group.fields:
|
|
457
457
|
field = field_group.model_class._meta.get_field(field_name)
|
|
458
|
-
|
|
459
|
-
# Use column name for FK fields
|
|
460
|
-
if getattr(field, "is_relation", False) and hasattr(field, "attname"):
|
|
461
|
-
db_field_name = field.attname
|
|
462
|
-
# For FK fields, use the actual target field from the relationship
|
|
463
|
-
# This ensures proper type casting for the database column
|
|
464
|
-
if hasattr(field, "target_field"):
|
|
465
|
-
target_field = field.target_field
|
|
466
|
-
else:
|
|
467
|
-
# Fallback: create a field that matches the FK column type
|
|
468
|
-
from django.db.models import BigIntegerField
|
|
469
|
-
target_field = BigIntegerField()
|
|
470
|
-
|
|
471
|
-
logger.debug(f"FK field {field_name} -> column {db_field_name}, target_field: {target_field}")
|
|
472
|
-
else:
|
|
473
|
-
db_field_name = field_name
|
|
474
|
-
target_field = field
|
|
475
|
-
|
|
476
458
|
when_statements = []
|
|
459
|
+
|
|
477
460
|
for pk, obj in zip(root_pks, plan.objects):
|
|
478
461
|
obj_pk = getattr(obj, "pk", None) or getattr(obj, "id", None)
|
|
479
462
|
if obj_pk is None:
|
|
480
463
|
continue
|
|
481
464
|
|
|
482
|
-
value = getattr(obj,
|
|
483
|
-
|
|
484
|
-
# For FK fields, ensure we get the actual ID value, not the related object
|
|
485
|
-
if getattr(field, "is_relation", False) and hasattr(field, "attname"):
|
|
486
|
-
# If value is a model instance, get its pk
|
|
487
|
-
if value is not None and hasattr(value, "pk"):
|
|
488
|
-
value = value.pk
|
|
489
|
-
# If value is a string representation of an ID, convert to int
|
|
490
|
-
elif value is not None and isinstance(value, str):
|
|
491
|
-
if value.isdigit():
|
|
492
|
-
value = int(value)
|
|
493
|
-
elif value == "":
|
|
494
|
-
value = None
|
|
495
|
-
|
|
496
|
-
# Create the Value expression with proper type casting
|
|
497
|
-
value_expr = Value(value, output_field=target_field)
|
|
498
|
-
|
|
465
|
+
value = getattr(obj, field_name)
|
|
499
466
|
when_statements.append(
|
|
500
467
|
When(
|
|
501
468
|
**{field_group.filter_field: pk},
|
|
502
|
-
then=
|
|
469
|
+
then=Value(value, output_field=field),
|
|
503
470
|
),
|
|
504
471
|
)
|
|
505
472
|
|
|
506
473
|
if when_statements:
|
|
507
|
-
case_statements[
|
|
508
|
-
*when_statements, output_field=target_field,
|
|
509
|
-
)
|
|
474
|
+
case_statements[field_name] = Case(*when_statements, output_field=field)
|
|
510
475
|
|
|
511
476
|
# Execute bulk update
|
|
512
477
|
if case_statements:
|
|
@@ -13,14 +13,14 @@ django_bulk_hooks/manager.py,sha256=3mFzB0ZzHHeXWdKGObZD_H0NlskHJc8uYBF69KKdAXU,
|
|
|
13
13
|
django_bulk_hooks/models.py,sha256=4Vvi2LiGP0g4j08a5liqBROfsO8Wd_ermBoyjKwfrPU,2512
|
|
14
14
|
django_bulk_hooks/operations/__init__.py,sha256=BtJYjmRhe_sScivLsniDaZmBkm0ZLvcmzXFKL7QY2Xg,550
|
|
15
15
|
django_bulk_hooks/operations/analyzer.py,sha256=8xNdsoeOCHsIIP7ztIuFHDewBR2dDSS6auOrSU8zmqE,9007
|
|
16
|
-
django_bulk_hooks/operations/bulk_executor.py,sha256=
|
|
16
|
+
django_bulk_hooks/operations/bulk_executor.py,sha256=GS2A8ftYsDw6CjI6HnGs4CwUgcxa-IHaQHahKWJAQ7A,21091
|
|
17
17
|
django_bulk_hooks/operations/coordinator.py,sha256=iSi-x3fq6_3UygWGeQY8Fq_gZWIqq_8N7WddPhVeygk,23526
|
|
18
18
|
django_bulk_hooks/operations/mti_handler.py,sha256=G-pxkzIqHqXGshRGksqmsN1J3rlzePUZrSv4wm7D3cQ,19162
|
|
19
19
|
django_bulk_hooks/operations/mti_plans.py,sha256=YP7LcV9Z8UqNS_x74OswF9_5swqruRTdAu6z-J_R6C0,3377
|
|
20
20
|
django_bulk_hooks/operations/record_classifier.py,sha256=KzUoAhfoqzFVrOabNZAby9Akb54h-fAQZmb8O-fIx_0,6221
|
|
21
21
|
django_bulk_hooks/queryset.py,sha256=rvJgQLwtSJztwc68nkJ6xwCsnbXQvkvS6_dbGGj8TFo,5886
|
|
22
22
|
django_bulk_hooks/registry.py,sha256=QyeA2OqNdMAMaLjFU9UF0YGhKiPKbZkmFQpLgof7uNs,9038
|
|
23
|
-
django_bulk_hooks-0.2.
|
|
24
|
-
django_bulk_hooks-0.2.
|
|
25
|
-
django_bulk_hooks-0.2.
|
|
26
|
-
django_bulk_hooks-0.2.
|
|
23
|
+
django_bulk_hooks-0.2.28.dist-info/LICENSE,sha256=dguKIcbDGeZD-vXWdLyErPUALYOvtX_fO4Zjhq481uk,1088
|
|
24
|
+
django_bulk_hooks-0.2.28.dist-info/METADATA,sha256=yIh-znui77vFw4T0BSqDXUbblcAkQFTx8ONBPtaltyk,9265
|
|
25
|
+
django_bulk_hooks-0.2.28.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
26
|
+
django_bulk_hooks-0.2.28.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|