django-bulk-hooks 0.2.25__py3-none-any.whl → 0.2.27__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.

@@ -459,8 +459,16 @@ class BulkExecutor:
459
459
  # Use column name for FK fields
460
460
  if getattr(field, "is_relation", False) and hasattr(field, "attname"):
461
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)
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}")
464
472
  else:
465
473
  db_field_name = field_name
466
474
  target_field = field
@@ -475,30 +483,17 @@ class BulkExecutor:
475
483
 
476
484
  # For FK fields, ensure we get the actual ID value, not the related object
477
485
  if getattr(field, "is_relation", False) and hasattr(field, "attname"):
478
- # ADD DEBUG LOGGING
479
- logger.error(f"DEBUG FK CONVERSION: field={field_name}, db_field={db_field_name}")
480
- logger.error(f"DEBUG FK VALUE BEFORE: value={value!r}, type={type(value)}")
481
- logger.error(f"DEBUG FK field.attname={field.attname}, field.target_field={getattr(field, 'target_field', 'N/A')}")
482
-
483
486
  # If value is a model instance, get its pk
484
487
  if value is not None and hasattr(value, "pk"):
485
488
  value = value.pk
486
- logger.error(f"DEBUG FK: Extracted pk from model instance: {value!r}")
487
489
  # If value is a string representation of an ID, convert to int
488
490
  elif value is not None and isinstance(value, str):
489
- logger.error(f"DEBUG FK: Value is string, isdigit()={value.isdigit()}")
490
491
  if value.isdigit():
491
492
  value = int(value)
492
- logger.error(f"DEBUG FK: Converted string to int: {value!r}")
493
493
  elif value == "":
494
494
  value = None
495
- logger.error(f"DEBUG FK: Converted empty string to None")
496
- else:
497
- logger.error(f"DEBUG FK: String value doesn't pass isdigit() check! ASCII codes: {[ord(c) for c in value]}")
498
-
499
- logger.error(f"DEBUG FK VALUE AFTER: value={value!r}, type={type(value)}")
500
495
 
501
- # Create the Value expression - always use output_field to ensure correct type casting
496
+ # Create the Value expression with proper type casting
502
497
  value_expr = Value(value, output_field=target_field)
503
498
 
504
499
  when_statements.append(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-bulk-hooks
3
- Version: 0.2.25
3
+ Version: 0.2.27
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=KdjrS6gSmGhbAnNx6Vndj6d-8yFudmSfSw7T708wfsE,23814
16
+ django_bulk_hooks/operations/bulk_executor.py,sha256=3HJxJSRyCvkqcukfP7mrZ0dpNk5snxlzYTNcYiK_-CY,23130
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.25.dist-info/LICENSE,sha256=dguKIcbDGeZD-vXWdLyErPUALYOvtX_fO4Zjhq481uk,1088
24
- django_bulk_hooks-0.2.25.dist-info/METADATA,sha256=ZvsNJzA617wyAgoUcv-iiCHFWqR_hoKp_zPiXkWHc78,9265
25
- django_bulk_hooks-0.2.25.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
26
- django_bulk_hooks-0.2.25.dist-info/RECORD,,
23
+ django_bulk_hooks-0.2.27.dist-info/LICENSE,sha256=dguKIcbDGeZD-vXWdLyErPUALYOvtX_fO4Zjhq481uk,1088
24
+ django_bulk_hooks-0.2.27.dist-info/METADATA,sha256=RPjXmGOnDonnGQUXvQn_DE3jB-_ZMwb92pEpEJBgdgc,9265
25
+ django_bulk_hooks-0.2.27.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
26
+ django_bulk_hooks-0.2.27.dist-info/RECORD,,