django-bulk-hooks 0.1.135__tar.gz → 0.1.137__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 (17) hide show
  1. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/queryset.py +12 -7
  3. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/LICENSE +0 -0
  5. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/README.md +0 -0
  6. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/conditions.py +0 -0
  8. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/constants.py +0 -0
  9. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/context.py +0 -0
  10. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/decorators.py +0 -0
  11. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/engine.py +0 -0
  12. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/enums.py +0 -0
  13. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/handler.py +0 -0
  14. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/manager.py +0 -0
  15. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/models.py +0 -0
  16. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/django_bulk_hooks/priority.py +0 -0
  17. {django_bulk_hooks-0.1.135 → django_bulk_hooks-0.1.137}/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.1.135
3
+ Version: 0.1.137
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
@@ -381,17 +381,21 @@ class HookQuerySet(models.QuerySet):
381
381
  # Use Django's exact approach: call _prepare_for_bulk_create then partition
382
382
  base_qs._prepare_for_bulk_create(all_child_objects)
383
383
 
384
- # Use partition like Django does to separate objects with PKs from those without
385
- from itertools import partition
386
- objs_without_pk, objs_with_pk = partition(lambda o: o._is_pk_set(), all_child_objects)
387
- objs_without_pk = list(objs_without_pk)
388
- objs_with_pk = list(objs_with_pk)
384
+ # Implement our own partition since itertools.partition might not be available
385
+ objs_without_pk, objs_with_pk = [], []
386
+ for obj in all_child_objects:
387
+ if obj._is_pk_set():
388
+ objs_with_pk.append(obj)
389
+ else:
390
+ objs_without_pk.append(obj)
389
391
 
390
392
  print(f"DEBUG: Prepared {len(objs_with_pk)} objects with PK, {len(objs_without_pk)} objects without PK")
391
393
 
392
394
  # Use Django's internal _batched_insert method
393
395
  opts = child_model._meta
394
- fields = [f for f in opts.concrete_fields if not f.generated]
396
+ # For child models in MTI, we need to exclude the parent's primary key
397
+ # since it's inherited and not stored in the child table
398
+ fields = [f for f in opts.concrete_fields if not f.generated and not f.primary_key]
395
399
 
396
400
  with transaction.atomic(using=self.db, savepoint=False):
397
401
  if objs_with_pk:
@@ -411,7 +415,8 @@ class HookQuerySet(models.QuerySet):
411
415
 
412
416
  if objs_without_pk:
413
417
  print(f"DEBUG: Inserting {len(objs_without_pk)} objects without PK")
414
- fields = [f for f in fields if not isinstance(f, AutoField)]
418
+ # For objects without PK, we still need to exclude primary key fields
419
+ fields = [f for f in fields if not isinstance(f, AutoField) and not f.primary_key]
415
420
  returned_columns = base_qs._batched_insert(
416
421
  objs_without_pk,
417
422
  fields,
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.1.135"
3
+ version = "0.1.137"
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"