37 votes

Une vingtaine de modèles dans une application django

J'ai commencé à travailler sur une application locale pour moi-même qui fonctionne via le navigateur. Ayant récemment parcouru le tutoriel sur django, je pense qu'il serait préférable d'utiliser django plutôt que python.

Il y a un problème : j'ai au moins 20 modèles et chacun d'eux aura de nombreuses fonctions. Cela va tout simplement créer un énorme fichier de modèles et probablement aussi d'énormes vues. Comment les répartir ?

El les modèles sont tous liés donc je ne peux pas simplement les transformer en applications séparées, n'est-ce pas ?

73voto

Jarret Hardie Points 36266

C'est un besoin assez courant... Je ne peux pas m'imaginer parcourir un fichier models.py de 10 000 lignes :-)

Vous pouvez diviser les models.py (et views.py aussi) dans un package. Dans ce cas, l'arbre de votre projet ressemblera à ceci :

/my_proj
    /myapp
        /models
            __init__.py
            person.py

El __init__.py fait du dossier un paquet. Le seul problème est de s'assurer de définir un fichier interne de type Meta pour vos modèles qui indiquent l'app_label pour le modèle, sinon Django aura des difficultés à construire votre schéma :

class Person(models.Model):
    name = models.CharField(max_length=128)

    class Meta:
        app_label = 'myapp'

Une fois que c'est fait, importer le modèle dans votre __init__.py afin que Django et sync db le trouvent :

from person import Person

De cette façon, vous pouvez toujours faire from myapp.models import Person

31voto

S.Lott Points 207588

"J'ai au moins 20 modèles" - il s'agit probablement de plus d'une "application" Django et plutôt d'un "projet" Django avec plusieurs petites "applications".

J'aime diviser les choses autour de sujets ou de domaines qui ont peu (1 à 5) de modèles. Cela devient une "application" Django - et constitue l'unité utile de réutilisation.

Le "projet" global est une collection d'applications qui présente la chose intégrée construite à partir de pièces séparées.

Cela facilite également la gestion de projet puisque chaque "application" peut devenir un sprint avec une version à la fin.

16voto

NathanD Points 2433

Les modèles sont tous liés, donc je ne peux pas simplement les transformer en applications distinctes puis-je ?

Vous puede les séparer dans des applications distinctes. Pour utiliser un modèle dans une application à partir d'une autre application, il suffit de l'importer de la même manière que vous importeriez des applications django.contrib.

5voto

Flávio Amieiro Points 5872

Le fait d'avoir 20 modèles dans une seule application peut être un signe que vous devriez la diviser en plusieurs petites applications.

Le but d'une application Django est d'avoir un petit morceau de code à usage unique, qui s'intègre parfaitement.

Ainsi, si vous avez un site de commerce électronique, vous pouvez avoir une application de panier d'achat, une application de facturation, etc.

Gardez à l'esprit qu'il n'y a aucun problème à ce que les applications dépendent l'une de l'autre (même s'il est toujours préférable qu'elles puissent être découplées), mais il ne faut pas qu'une application fasse deux choses très distinctes.

L'article Astuces Django : conception d'une application pourrait vous aider. Comme toujours, prenez tout ce que vous lisez avec un grain de sel (y compris cette réponse).

1voto

Glenn Snyder Points 808

Excellent article - tant les instructions sur la façon de diviser un fichier modèle en plusieurs parties que la discussion/débat sur l'opportunité d'utiliser plusieurs applications.

J'ai constaté que je devais déplacer mes données de montage dans le paquetage des modèles pour qu'elles soient rechargées lors de l'exécution de syncdb. Déplacez simplement le dossier "fixtures" dans le nouveau dossier "models" et cela devrait fonctionner. J'ai juste pensé que je partagerais ce détail au cas où il serait utile à quelqu'un d'autre comme moi qui est relativement nouveau dans Django.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X