What you’re looking for is commonly referred to as “chained” or “cascade” select widgets.
There are many conversations in this forum about this topic. Two of the more recent that may be of value are:
If you’re looking for a pre-packaged solution, Select2 (and its corresponding Django package Django-Select2) are probably what are referenced most often here. (We’re starting to use HTMX in a new project for this - it’s another viable option.)
If you check out djangopackages.org and search for “select”, you’ll see some other options.