django-bulk-hooks 0.2.53__tar.gz → 0.2.54__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.

Files changed (27) hide show
  1. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/operations/mti_handler.py +16 -3
  3. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/LICENSE +0 -0
  5. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/README.md +0 -0
  6. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/changeset.py +0 -0
  8. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/conditions.py +0 -0
  9. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/constants.py +0 -0
  10. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/context.py +0 -0
  11. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/decorators.py +0 -0
  12. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/dispatcher.py +0 -0
  13. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/enums.py +0 -0
  14. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/factory.py +0 -0
  15. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/handler.py +0 -0
  16. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/helpers.py +0 -0
  17. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/manager.py +0 -0
  18. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/models.py +0 -0
  19. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/operations/__init__.py +0 -0
  20. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/operations/analyzer.py +0 -0
  21. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/operations/bulk_executor.py +0 -0
  22. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/operations/coordinator.py +0 -0
  23. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/operations/field_utils.py +0 -0
  24. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/operations/mti_plans.py +0 -0
  25. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/operations/record_classifier.py +0 -0
  26. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/queryset.py +0 -0
  27. {django_bulk_hooks-0.2.53 → django_bulk_hooks-0.2.54}/django_bulk_hooks/registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-bulk-hooks
3
- Version: 0.2.53
3
+ Version: 0.2.54
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
@@ -193,8 +193,12 @@ class MTIHandler:
193
193
  if existing_pks_map is None:
194
194
  existing_pks_map = {}
195
195
 
196
- # For upsert operations, don't set PKs on source objects - let Django's bulk_create handle it
197
- # The PKs will be set on the resulting objects after the bulk operation
196
+ # Set PKs on existing objects so they can be updated
197
+ if existing_pks_map:
198
+ for obj in objs:
199
+ if id(obj) in existing_pks_map:
200
+ obj.pk = existing_pks_map[id(obj)]
201
+ obj.id = existing_pks_map[id(obj)]
198
202
 
199
203
  # Build parent levels
200
204
  parent_levels = self._build_parent_levels(
@@ -402,7 +406,12 @@ class MTIHandler:
402
406
  """
403
407
  child_obj = child_model()
404
408
 
405
- # Copy field values (excluding AutoField and parent links)
409
+ # Copy field values (excluding AutoField, parent links, and inherited fields)
410
+ # In MTI, child objects should only have values for fields defined directly on the child model
411
+ parent_fields = set()
412
+ for parent_model in child_model._meta.parents.keys():
413
+ parent_fields.update(f.name for f in parent_model._meta.local_fields)
414
+
406
415
  for field in child_model._meta.local_fields:
407
416
  if isinstance(field, AutoField):
408
417
  continue
@@ -413,6 +422,10 @@ class MTIHandler:
413
422
  if child_model._meta.get_ancestor_link(field.related_model) == field:
414
423
  continue
415
424
 
425
+ # Skip inherited fields - these belong to parent models
426
+ if field.name in parent_fields:
427
+ continue
428
+
416
429
  if hasattr(source_obj, field.name):
417
430
  # Use centralized field value extraction for consistent FK handling
418
431
  value = get_field_value_for_db(source_obj, field.name, source_obj.__class__)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.2.53"
3
+ version = "0.2.54"
4
4
  description = "Hook-style hooks for Django bulk operations like bulk_create and bulk_update."
5
5
  authors = ["Konrad Beck <konrad.beck@merchantcapital.co.za>"]
6
6
  readme = "README.md"