mirror of
https://github.com/django/django.git
synced 2025-01-22 00:02:15 +00:00
Florian Apolloner
bc7dd8490b
Fixed #21171 -- Avoided starting a transaction when a single (or atomic queries) are executed.
Checked the following locations: * Model.save(): If there are parents involved, take the safe way and use transactions since this should be an all or nothing operation. If the model has no parents: * Signals are executed before and after the previous existing transaction -- they were never been part of the transaction. * if `force_insert` is set then only one query is executed -> atomic by definition and no transaction needed. * same applies to `force_update`. * If a primary key is set and no `force_*` is set Django will try an UPDATE and if that returns zero rows it tries an INSERT. The first case is completly save (single query). In the second case a transaction should not produce different results since the update query is basically a no-op then (might miss something though). * QuerySet.update(): no signals issued, single query -> no transaction needed. * Model/Collector.delete(): This one is fun due to the fact that is does many things at once. Most importantly though: It does send signals as part of the transaction, so for maximum backwards compatibility we need to be conservative. To ensure maximum compatibility the transaction here is removed only if the following holds true: * A single instance is being deleted. * There are no signal handlers attached to that instance. * There are no deletions/updates to cascade. * There are no parents which also need deletion.
…
…
…
…
…
…
…
Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Thanks for checking it out. All documentation is in the "``docs``" directory and online at https://docs.djangoproject.com/en/stable/. If you're just getting started, here's how we recommend you read the docs: * First, read ``docs/intro/install.txt`` for instructions on installing Django. * Next, work through the tutorials in order (``docs/intro/tutorial01.txt``, ``docs/intro/tutorial02.txt``, etc.). * If you want to set up an actual deployment server, read ``docs/howto/deployment/index.txt`` for instructions. * You'll probably want to read through the topical guides (in ``docs/topics``) next; from there you can jump to the HOWTOs (in ``docs/howto``) for specific problems, and check out the reference (``docs/ref``) for gory details. * See ``docs/README`` for instructions on building an HTML version of the docs. Docs are updated rigorously. If you find any problems in the docs, or think they should be clarified in any way, please take 30 seconds to fill out a ticket here: https://code.djangoproject.com/newticket To get more help: * Join the ``#django`` channel on irc.freenode.net. Lots of helpful people hang out there. Read the archives at https://botbot.me/freenode/django/. See https://en.wikipedia.org/wiki/Wikipedia:IRC/Tutorial if you're new to IRC. * Join the django-users mailing list, or read the archives, at https://groups.google.com/group/django-users. To contribute to Django: * Check out https://docs.djangoproject.com/en/dev/internals/contributing/ for information about getting involved. To run Django's test suite: * Follow the instructions in the "Unit tests" section of ``docs/internals/contributing/writing-code/unit-tests.txt``, published online at https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/#running-the-unit-tests