django-bulk-hooks 0.1.268__tar.gz → 0.1.270__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.268 → django_bulk_hooks-0.1.270}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/queryset.py +15 -3
  3. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/LICENSE +0 -0
  5. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/README.md +0 -0
  6. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/conditions.py +0 -0
  8. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/constants.py +0 -0
  9. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/context.py +0 -0
  10. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/decorators.py +0 -0
  11. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/engine.py +0 -0
  12. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/enums.py +0 -0
  13. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/handler.py +0 -0
  14. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/manager.py +0 -0
  15. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/models.py +0 -0
  16. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/django_bulk_hooks/priority.py +0 -0
  17. {django_bulk_hooks-0.1.268 → django_bulk_hooks-0.1.270}/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.268
3
+ Version: 0.1.270
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
@@ -532,24 +532,33 @@ class HookQuerySetMixin:
532
532
  unique_values = []
533
533
  for obj in objs:
534
534
  unique_value = {}
535
+ query_fields = {} # Track which database field to use for each unique field
535
536
  for field_name in unique_fields:
536
537
  if hasattr(obj, field_name):
537
538
  unique_value[field_name] = getattr(obj, field_name)
539
+ query_fields[field_name] = field_name
540
+ elif hasattr(obj, field_name + '_id'):
541
+ # Handle ForeignKey fields where _id suffix is used
542
+ unique_value[field_name] = getattr(obj, field_name + '_id')
543
+ query_fields[field_name] = field_name + '_id' # Use _id field for query
538
544
  if unique_value:
539
- unique_values.append(unique_value)
545
+ unique_values.append((unique_value, query_fields))
540
546
 
541
547
  if unique_values:
542
548
  # Query the database to see which records already exist - SINGLE BULK QUERY
543
549
  from django.db.models import Q
544
550
 
545
551
  existing_filters = Q()
546
- for unique_value in unique_values:
552
+ for unique_value, query_fields in unique_values:
547
553
  filter_kwargs = {}
548
554
  for field_name, value in unique_value.items():
549
- filter_kwargs[field_name] = value
555
+ # Use the correct database field name (may include _id suffix)
556
+ db_field_name = query_fields[field_name]
557
+ filter_kwargs[db_field_name] = value
550
558
  existing_filters |= Q(**filter_kwargs)
551
559
 
552
560
  # Get all existing records in one query and create a lookup set
561
+ # We need to use the original unique_fields for values_list to maintain consistency
553
562
  existing_records_lookup = set()
554
563
  for existing_record in model_cls.objects.filter(
555
564
  existing_filters
@@ -563,6 +572,9 @@ class HookQuerySetMixin:
563
572
  for field_name in unique_fields:
564
573
  if hasattr(obj, field_name):
565
574
  obj_unique_value[field_name] = getattr(obj, field_name)
575
+ elif hasattr(obj, field_name + '_id'):
576
+ # Handle ForeignKey fields where _id suffix is used
577
+ obj_unique_value[field_name] = getattr(obj, field_name + '_id')
566
578
 
567
579
  # Check if this record already exists using our bulk lookup
568
580
  if obj_unique_value:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.1.268"
3
+ version = "0.1.270"
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"