Protip on separating your models etc out: use modules instead of apps. so instead of a models.py have a models folder with a structure like this
- models
cheese.py
spam.py
__init__.py
You can then put all your cheese related models in cheese.py, and all your spam related models in spam.py. Then Simply import those models from __init__.py and django is none the wiser that anything changes. Tada: organized models without having to dive into the broken mess that is apps.
The same trick of course applies to any python file you want to split up. Views, urls, managers, etc etc.
Yeah that works pretty well too. I think there’s some minor advantages of having them in apps, they’re sorted neatly in the admin, you’re forced to split views, models, templates, admin, etc together which keeps things a bit cleaner. But it’s also messier in other ways (you have to sift through too many files to find the thing you want).
Migrations that cross app boundaries are a nightmare. Before you know it there's thousands of migrations in your various apps, and squash is powerless to help you. It'll pretend to work but break your migrations if you try to squash across any migration that depends on a migration in a different app.
IMO migrations in combinations with apps are fully broken in django. it's unworkable for large projects.
The same trick of course applies to any python file you want to split up. Views, urls, managers, etc etc.