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

@@ -7,7 +7,8 @@ This service coordinates bulk database operations with validation and MTI handli
7
7
  import logging
8
8
 
9
9
  from django.db import transaction
10
- from django.db.models import AutoField, ForeignKey
10
+ from django.db.models import AutoField, ForeignKey, Case, When, Value
11
+ from django.db.models.functions import Cast
11
12
 
12
13
  logger = logging.getLogger(__name__)
13
14
 
@@ -487,16 +488,16 @@ class BulkExecutor:
487
488
 
488
489
  # Handle NULL values specially for ForeignKey fields
489
490
  if is_fk and value is None:
490
- # For ForeignKey fields with None values, use None directly
491
- # Django handles this as proper NULL with correct type
491
+ # For ForeignKey fields with None values, use Cast to ensure proper NULL type
492
+ # PostgreSQL needs explicit type casting for NULL values in CASE statements
492
493
  logger.info(
493
494
  f"DEBUG NULL FIX APPLIED - Field: {field_name}, "
494
- f"PK: {pk}, Using None directly instead of Value(None, ...)"
495
+ f"PK: {pk}, Using Cast(Value(None), output_field={type(case_output_field).__name__})"
495
496
  )
496
497
  when_statements.append(
497
498
  When(
498
499
  **{field_group.filter_field: pk},
499
- then=None,
500
+ then=Cast(Value(None), output_field=case_output_field),
500
501
  ),
501
502
  )
502
503
  else:
@@ -528,6 +529,20 @@ class BulkExecutor:
528
529
  f"WhenThen: {when_stmt.result}, "
529
530
  f"WhenThenType: {type(when_stmt.result).__name__}"
530
531
  )
532
+
533
+ # DEBUG: Check if the When result has output_field
534
+ if hasattr(when_stmt.result, 'output_field'):
535
+ logger.info(
536
+ f"DEBUG When Result OutputField - Field: {field_name}, "
537
+ f"WhenIndex: {i}, "
538
+ f"ResultOutputField: {type(when_stmt.result.output_field).__name__}"
539
+ )
540
+ else:
541
+ logger.info(
542
+ f"DEBUG When Result No OutputField - Field: {field_name}, "
543
+ f"WhenIndex: {i}, "
544
+ f"ResultType: {type(when_stmt.result).__name__}"
545
+ )
531
546
 
532
547
  # Execute bulk update
533
548
  if case_statements:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-bulk-hooks
3
- Version: 0.2.38
3
+ Version: 0.2.40
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=qPP21ohpIubYu5fS-J7yISkJGTXlRpKTKy2CuqLSMdw,24799
16
+ django_bulk_hooks/operations/bulk_executor.py,sha256=gvIIssYJMNk4advEZySI3Q204vwHq2P8v8nGV8Y05_0,25851
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.38.dist-info/LICENSE,sha256=dguKIcbDGeZD-vXWdLyErPUALYOvtX_fO4Zjhq481uk,1088
24
- django_bulk_hooks-0.2.38.dist-info/METADATA,sha256=Mjna3Dp42_Kpjkg6Y6PjnCd967MWb9jBKGVFrBIVzDU,9265
25
- django_bulk_hooks-0.2.38.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
26
- django_bulk_hooks-0.2.38.dist-info/RECORD,,
23
+ django_bulk_hooks-0.2.40.dist-info/LICENSE,sha256=dguKIcbDGeZD-vXWdLyErPUALYOvtX_fO4Zjhq481uk,1088
24
+ django_bulk_hooks-0.2.40.dist-info/METADATA,sha256=zU71BFDY6FukdTMSbdDeTl1fqTXkyLl_HyFgoZlbHtQ,9265
25
+ django_bulk_hooks-0.2.40.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
26
+ django_bulk_hooks-0.2.40.dist-info/RECORD,,