Start here. This is the direct spoken answer to practice first.
Overview
Chooses Django database test isolation according to whether real commit and rollback behavior must be observed.
Django TestCase wraps each test in transactions and rolls them back, which makes normal database tests fast and isolated. TransactionTestCase resets data with a flush and allows the test to observe real commit and rollback behavior. I use TestCase by default. I switch when the behavior itself depends on transaction boundaries, such as select_for_update or visibility after commit.