python tutorial Où le code django manager doit-il être actif?




django tutorial français (4)

Ceci est une question de django assez simple. Mon code de responsable réside généralement dans models.py, mais que se passe-t-il lorsque models.py est vraiment énorme? Existe-t-il une autre solution pour laisser le code de votre responsable vivre dans models.py pour des raisons de maintenance et pour éviter les importations circulaires?

On peut se demander pourquoi models.py est si énorme, mais supposons simplement que sa taille et son utilité sont justifiées.


Votre meilleur pari avec un grand nombre de modèles est d'utiliser les modules django à votre avantage et de créer simplement un dossier nommé models. Déplacez vos anciens models.py dans ce dossier de modèles et renommez-le __init__.py . Cela vous permettra ensuite de séparer chaque modèle en fichiers plus spécifiques à l'intérieur de ce dossier modèle.

Il vous suffirait alors d'importer chaque modèle dans l' __init__.py de noms de votre __init__.py .

Ainsi, par exemple, vous pourriez vouloir le séparer en:

yourapp/
    models/
        __init__.py # This file should import anything from your other files in this directory
        basic.py # Just an example name
        morespecificmodels.py # Just an example name
        managers.py # Might want to separate your manager into this

Alors votre __init__.py peut simplement être:

from basic import * # You should replace * with each models name, most likely.
from managers import YourManager # Whatever your manager is called.

C'est la structure que j'utilise lorsque mes fichiers de modèles deviennent énormes, mais j'essaie de séparer les choses en applications plus connectables aussi souvent que possible - c'est donc rarement utilisé par moi.

J'espère que cela t'aides.


Ce que j'ai fait lors de la création d'applications Django consistait à créer un fichier [modelname] .py avec uniquement le code de modèle, le code de gestionnaire et parfois le code de formulaire spécifiques et à importer un fichier __init__.py dans le répertoire models. Cela m'a aidé au moins à le garder gérable.


Je place toujours le mien dans managers.py. Si vous avez un problème d'importation circulaire, rappelez-vous que a) Vous pouvez référencer la classe de modèle pour un gestionnaire sur self.model, et b) Vous pouvez effectuer des importations à l'intérieur de fonctions.


Je préfère conserver mes modèles dans models.py et les gestionnaires dans managers.py (formulaires dans forms.py) tous dans la même application. Pour les responsables plus génériques, je préfère les conserver dans core.managers s’ils peuvent être réutilisés pour d’autres applications. Dans certaines de nos plus grandes applications avec models / modelname.py, il contiendra un gestionnaire et le code du modèle qui ne semble pas mauvais.





django-managers