Updated bulk_create_with_history to support update_conflicts of bulk_create #1419
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
The
bulk_create
queryset method allows users to utilize database's upsert functionality. Or at least something close to it. This PR seeks to support that functionality.Some changes:
update_conflicts
is specified, a second query has to run to fetch the updated data. It's possible the model instances in memory do not reflect the values in the database. This is tested intest_bulk_create_history_with_duplicates_update_conflicts_create_only_field
.history_type
is attempted to be calculated based on whether there is an existing historical record for an instance rather than assuming it's always being created. This is done via an annotation and anExists
subquery.Related Issue
Fixes #1323
Motivation and Context
See description.
How Has This Been Tested?
I tested this with postgres and sqlite, we'll see what CI says 🤞
Screenshots (if appropriate):
Types of changes
Checklist:
pre-commit run
command to format and lint.AUTHORS.rst
CHANGES.rst