Fixed #23074 -- Avoided leaking savepoints in atomic.

Thanks Chow Loong Jin for the report and the initial patch.
Fixed #23113 -- ChoiceInput.render should take specified attrs into account.

Thanks to Tim Graham for the review.
Fixed #23102 -- Documented that sql* commands now respect allow_migrate().
Fixed #22491 -- documented how select_for_update() should be tested.

Thanks Andreas Pelme for the report.
Fixed #23100: Individual FK creation missing dependencies
Fixed #23121: AlterModelOptions operation not changing state right
Fixed #23114 -- Clarified documentation of template lookups.

Thanks to gmunumel and Tom Dalton for their help on the patch.
Fixed #23123 -- Don't use a bare except in ModelAdmin documentation

Thanks to wkschwartz for the report and to Tim for the patch.
Fixed #22962 -- Default values for ArrayField with migrations.

Fields normally try to force the default value to a string. As
translatable strings are not valid default values for ArrayField, we can
remove this behaviour which was causing issues with some migrations.

Thanks to @schinckel for the report.
Fixed #23120 -- Updated GeoDjango tutorial for migrations workflow.
Fixed #23079 -- Added data loss issues to those that will be backported to LTS.
Forwardported 1.6.6 release notes for refs #20292.
Make detect_soft_applied exit correctly on non-create migrations
Fix soft_applied in a way that doesn't break tests
Fixed a typo in the admin documentation.

The 'app' subpackage does not exist, should be 'app'.
Fixed #23101: Prefer doing deletes before creates in autodetector.

Makes declined or missed renames still work (but drop data).
Fixed #23090: Document and enforce not double-squashing migrations
Fixed #23127: south_migrations note in docs
Fixed #23092: Squashing handles external dependencies
Fixed #23129 -- Added 'true' and 'false' to `NullBooleanField`.

JavaScript serializations of forms will sometimes render the boolean
values as the strings 'true' and 'false', in lower case. Rather than
repeat boilerplate in the JavaScript to circumvent this, it seems
reasonable to allow Django to understand the lower-case versions of the
booleans.