django-bulk-hooks 0.2.26__tar.gz → 0.2.27__tar.gz
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-0.2.26 → django_bulk_hooks-0.2.27}/PKG-INFO +1 -1
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/bulk_executor.py +11 -22
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/pyproject.toml +1 -1
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/LICENSE +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/README.md +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/__init__.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/changeset.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/conditions.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/constants.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/context.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/decorators.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/dispatcher.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/enums.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/factory.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/handler.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/helpers.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/manager.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/models.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/__init__.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/analyzer.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/coordinator.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/mti_handler.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/mti_plans.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/record_classifier.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/queryset.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/registry.py +0 -0
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/bulk_executor.py
RENAMED
|
@@ -459,13 +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
|
-
#
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
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}")
|
|
469
472
|
else:
|
|
470
473
|
db_field_name = field_name
|
|
471
474
|
target_field = field
|
|
@@ -480,32 +483,18 @@ class BulkExecutor:
|
|
|
480
483
|
|
|
481
484
|
# For FK fields, ensure we get the actual ID value, not the related object
|
|
482
485
|
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
486
|
# If value is a model instance, get its pk
|
|
489
487
|
if value is not None and hasattr(value, "pk"):
|
|
490
488
|
value = value.pk
|
|
491
|
-
logger.error(f"DEBUG FK: Extracted pk from model instance: {value!r}")
|
|
492
489
|
# If value is a string representation of an ID, convert to int
|
|
493
490
|
elif value is not None and isinstance(value, str):
|
|
494
|
-
logger.error(f"DEBUG FK: Value is string, isdigit()={value.isdigit()}")
|
|
495
491
|
if value.isdigit():
|
|
496
492
|
value = int(value)
|
|
497
|
-
logger.error(f"DEBUG FK: Converted string to int: {value!r}")
|
|
498
493
|
elif value == "":
|
|
499
494
|
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
495
|
|
|
506
|
-
# Create the Value expression
|
|
496
|
+
# Create the Value expression with proper type casting
|
|
507
497
|
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
498
|
|
|
510
499
|
when_statements.append(
|
|
511
500
|
When(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/__init__.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/analyzer.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/coordinator.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/mti_handler.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.27}/django_bulk_hooks/operations/mti_plans.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|