Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django best practice: number of model classes per file / directory structure

Tags:

django

Another best-practice question to those with experience: How many models do you put in one file?

I've seen many examples that stuff all model classes into a single "models.py" file, which really feels wrong to me. In previous projects using other stacks I've gone with one file per model class. How is it done properly in Django for non-trivial applications with, say, 20 model classes? What would the directory structure look like?

like image 901
Withnail Avatar asked Jul 07 '11 19:07

Withnail


1 Answers

Many people, especially those coming from the Rails world, get hung up on the term "application" and start throwing absolutely everything into a single app. In Django, an application is a single-use module that does one thing and does it well. Each application should be describable in one or two short sentences. A "project" is a collection of applications unified by a settings file. Even for something as complicated as an online store , something I'm discovering now, having more than four or five models in a single application is a warning sign: It was better that the store application (which has the shopping cart) be dependent upon upon the product application than have both in the same app. The same was true of invoices and payments, and so on.

Take a look at Django in the Real World, Jacob Kaplan-Moss's presentation about how to write Django applications.

A Django application is encapsulation: it describes one simple object (or collection of objects) and its API. Having 20 models sounds like you don't have a clean API, and therefore a clear concept, of what this app does.

The answer you want is "it depends on what your application does." To that end, what the Hell does an application with 20 models do, anyway? Grab your copy of Refactoring and have fun.

like image 63
Elf Sternberg Avatar answered Sep 29 '22 09:09

Elf Sternberg