django-bulk-hooks 0.2.26__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.

@@ -455,69 +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
- # Get the field object for the database column, not the target field
463
- target_field = field_group.model_class._meta.get_field(field.attname)
464
- logger.error(f"DEBUG FK FIELD RESOLUTION: field_name={field_name}, db_field_name={db_field_name}")
465
- logger.error(f"DEBUG FK ORIGINAL FIELD: {field}")
466
- logger.error(f"DEBUG FK TARGET FIELD: {target_field}")
467
- logger.error(f"DEBUG FK TARGET FIELD TYPE: {type(target_field)}")
468
- logger.error(f"DEBUG FK TARGET FIELD CLASS: {target_field.__class__}")
469
- else:
470
- db_field_name = field_name
471
- target_field = field
472
-
473
458
  when_statements = []
459
+
474
460
  for pk, obj in zip(root_pks, plan.objects):
475
461
  obj_pk = getattr(obj, "pk", None) or getattr(obj, "id", None)
476
462
  if obj_pk is None:
477
463
  continue
478
464
 
479
- value = getattr(obj, db_field_name)
480
-
481
- # For FK fields, ensure we get the actual ID value, not the related object
482
- if getattr(field, "is_relation", False) and hasattr(field, "attname"):
483
- # ADD DEBUG LOGGING
484
- logger.error(f"DEBUG FK CONVERSION: field={field_name}, db_field={db_field_name}")
485
- logger.error(f"DEBUG FK VALUE BEFORE: value={value!r}, type={type(value)}")
486
- logger.error(f"DEBUG FK field.attname={field.attname}, field.target_field={getattr(field, 'target_field', 'N/A')}")
487
-
488
- # If value is a model instance, get its pk
489
- if value is not None and hasattr(value, "pk"):
490
- value = value.pk
491
- logger.error(f"DEBUG FK: Extracted pk from model instance: {value!r}")
492
- # If value is a string representation of an ID, convert to int
493
- elif value is not None and isinstance(value, str):
494
- logger.error(f"DEBUG FK: Value is string, isdigit()={value.isdigit()}")
495
- if value.isdigit():
496
- value = int(value)
497
- logger.error(f"DEBUG FK: Converted string to int: {value!r}")
498
- elif value == "":
499
- value = None
500
- logger.error(f"DEBUG FK: Converted empty string to None")
501
- else:
502
- logger.error(f"DEBUG FK: String value doesn't pass isdigit() check! ASCII codes: {[ord(c) for c in value]}")
503
-
504
- logger.error(f"DEBUG FK VALUE AFTER: value={value!r}, type={type(value)}")
505
-
506
- # Create the Value expression - always use output_field to ensure correct type casting
507
- value_expr = Value(value, output_field=target_field)
508
- logger.error(f"DEBUG VALUE EXPRESSION: value={value!r}, output_field={target_field}, value_expr={value_expr}")
509
-
465
+ value = getattr(obj, field_name)
510
466
  when_statements.append(
511
467
  When(
512
468
  **{field_group.filter_field: pk},
513
- then=value_expr,
469
+ then=Value(value, output_field=field),
514
470
  ),
515
471
  )
516
472
 
517
473
  if when_statements:
518
- case_statements[db_field_name] = Case(
519
- *when_statements, output_field=target_field,
520
- )
474
+ case_statements[field_name] = Case(*when_statements, output_field=field)
521
475
 
522
476
  # Execute bulk update
523
477
  if case_statements:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-bulk-hooks
3
- Version: 0.2.26
3
+ Version: 0.2.28
4
4
  Summary: Hook-style hooks for Django bulk operations like bulk_create and bulk_update.
5
5
  License: MIT
6
6
  Keywords: django,bulk,hooks
@@ -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=A2w6od5X1kAzD7l3d-HcpapSLqFQnEvCyhL2y4apQjk,24416
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.26.dist-info/LICENSE,sha256=dguKIcbDGeZD-vXWdLyErPUALYOvtX_fO4Zjhq481uk,1088
24
- django_bulk_hooks-0.2.26.dist-info/METADATA,sha256=JMPDKtZZJsSazK6ZTTiddHNHfB69or0ksqhbgj6osWI,9265
25
- django_bulk_hooks-0.2.26.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
26
- django_bulk_hooks-0.2.26.dist-info/RECORD,,
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,,