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.

@@ -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, db_field_name)
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=value_expr,
469
+ then=Value(value, output_field=field),
503
470
  ),
504
471
  )
505
472
 
506
473
  if when_statements:
507
- case_statements[db_field_name] = Case(
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:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-bulk-hooks
3
- Version: 0.2.27
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=3HJxJSRyCvkqcukfP7mrZ0dpNk5snxlzYTNcYiK_-CY,23130
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.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,,
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,,