"has_bulk_insert = False" results in only saving one ManyToManyField
|Reported by:||manfre||Owned by:||nobody|
|Component:||Database layer (models, ORM)||Version:||1.4|
|Severity:||Release blocker||Keywords:||regression, bulk_insert|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
Attempts to save multiple values for a ManyToManyField will only save one. It appears to follow the same pattern for bulk insert; delete all for parent record followed by a single insert. The form collects and passing down the appropriate clean_data, but only the first value is inserted in to the database.
This is a regression that will cause data errors for 3rd party db backends that have not (or cannot) enable the has_bulk_insert = True database feature. The core backends are unaffected because they have enabled the feature.
Discovered issue by using django-mssql. It'll no longer an issue as of django-mssql>=1.1a2. Version 1.1a1 added django 1.4 support, so no one should be using it on production yet. It's possible this regression only impacts django-mssql, but the SQLInsertCompiler is mostly a pass through to core.
A quick source check for django-pyodbc and ibm_db_django show that they have not enabled the feature.