Django - Choices vs Models (FKs)
Use models when you definitely need one of these:

ability easily edit (add, delete) choice with no need to reload the code;
ability to store additional info for any choice;
easy many-to-many relation (and filtering by it)
ability to work with dynamic subset of choices in different cases.

Use choices otherwise.
Lets say I'd like to give an user options to pick from and ensure that the submitted values are available options.
I've been reading the documentation and it seems to me that: if your values won't change then use choices -- if your data is dynamic then use models.
I'm a bit unsure though, shouldn't models be chosen over choices since they enforce some kind of constraint in the DB?