Boucler des importations

Dans des models

Le problème exposé dans ce sujet a été résolu.

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?

+0 -0

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.
  • 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!

+0 -0

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", ...)

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

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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