Coming from classic ASP we are now developing a relatively large Django application. We are trying to figure out how to separate the code for this project into manageable parts.
For the sake of argument let's say that we have CLIENTS, who have a many-to-many relation with USERS, these users have one ROLE, and each role has a many to-many relation to RIGHTS.
Currently, we have all of these in one app, called "backoffice".
The downside is that our forms.py and views.py within the backoffice app, contain classes for all of these entities. Because the application will certainly grow, we would like to separate the code for these entities into several files. So, even though they are not really separate apps (I think), they are certainly dealing with different parts of the backoffice part of our project.
I have read up on the Internet and there seem to be two sentiments; One is to split models.py and views.py etc., and make them into folders/modules. In those folders we could have a clients.py/users.py/roles.py etc. This would keep the app intact, but separate the code. In the end, we would have one big app, with a lot of files.
The other option is to split the code and turn clients, users and roles into seperate apps and remove the "backoffice" app we have now altogether. Django encourages division into smaller apps, but these aren't separate apps really, clients users and roles are closely related and the maintenance tools we are creating reflect this.
I actually started out by creating smaller (sub-)apps within teh "backoffice" app, but I found here that that's a no-go.
The thing is, apps should encourage re-use and the large web-app we are building has al lot of parts interwined and depending on eachother. There is no real way to separate it into smaller re-useable parts that would make real-world sense.
So the question really is; what would be the advisable way to separate the code for users/clients/roles in this example and what are upsides/downsides for either method? Maybe there's even a different method entirely which we haven't found...
Thanks for your time.