Boucler des importations

Dans des models

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je dispose de deux models:

  • Company/models.py
  • Founder/models.py

Ma classe Company dispose d'un field ManyToMany poitant sur ma classe Founder. Pour arriver a cela, j'ai du importer mon fichier Founder/models.py dans mon fichier Company/models.py.

Aujourd'hui je souhaiterai ajouter une méthode dans ma classe founder de manière a simplifier le listing de ses compagnies dans certaines vues. Cette méthode me renverrais la listes des compagnies ou le fondateurs participe.

Le seul problème c'est que si je veut faire ça je me retrouve avec une boucle d'importation que Django ne gère apparemment pas…

Une solution?

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Je vois deux solutions:

  • importer normalement dans Company/models.py mais n'importer que le module racine dans FOunder/models.py et utiliser le nom complet de Company/models.py
  • faire au moment où tu en as besoin seulement un import de Company/models.py dans Founder/models.py. Les imports ne sont pas nécessairement mis en début de fichier.
+0 -0
Auteur du sujet
  • faire au moment où tu en as besoin seulement un import de Company/models.py dans Founder/models.py. Les imports ne sont pas nécessairement mis en début de fichier.

artragis

Je viens de partir sur cette technique, qui marche en effet très bien.

Merci a toi!

Édité par Sanoc

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Staff

Les bonnes pratiques voudraient que les imports soient fait au début du fichier.

Une autre solution pour régler ton problème d'import circulaire dans un style un peu Django est qu'au lieu de faire ceci dans ta classe Company :

1
2
3
4
5
6
from Founder.models import Founder
# ...
# description de ma classe
# ...

    founders = models.ManyToManyField(Founder, ...)

Faire plutôt quelque chose comme ceci (plus besoin d'importer Founder dans le model) quand on désigne Founder non plus comme une classe mais en chaîne de caractère.

1
2
3
4
5
# ...
# description de ma classe
# ...

    founders = models.ManyToManyField("Founder", ...)
Auteur du sujet

OH! Intéressant ça! Je n'avais pas du tout vu que c'était possible!

Je pense qu'en effet c'est encore mieux, comme ça pas de problème futur d'importation en vue! De plus niveau performance tu évite de réimporter plein de fois les même fichier dans des espace de nom différents…

Merci a toi firm1

Édité par Sanoc

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte