2011-11-14 5 views
2

Bonjour, je divise mes fichiers parce que le modèle s'agrandit. Nous voici de nouveau avec des problèmes:Importation circulaire en python + django ?! comment le faire fonctionner?

Mes modèles; Si dans mon modèle de catégorie, je supprime le "ArticleToCategory" et la relation many-to-many cela fonctionne bien. Mais j'ai besoin d'eux!

Comment le réparer? J'ai supprimé model.py pour charger des fichiers à partir du package de modèle.

Catégorie (models.category):

class Category(MPTTModel): 
    # relationships 
    from RubeteDjango01.generic.models.article import Article 
    from RubeteDjango01.generic.models.article_to_category import ArticleToCategory 
    articles = m.ManyToManyField(Article, through=ArticleToCategory) 

ArticleToCategory (models.article_to_category):

from django.db import models as m 

class ArticleToCategory(m.Model): 
    from RubeteDjango01.generic.models.article import Article 
    from RubeteDjango01.generic.models.category import Category 

    article = m.ForeignKey(Article) 
    category = m.ForeignKey(Category) 

    class Meta: 
     db_table = 'articles_to_categories' 
     verbose_name_plural = 'ArticlesToCategories' 

grâce

Répondre

7

Vous pouvez définir des clés étrangères en utilisant des chaînes, pour éviter exactement ce problème .

class Art2C(..): 
    art = m.ForeignKey('Article') 
    from_other_app = m.ForeignKey('other_app.Article') 
+0

merci beaucoup! J'essayais de mettre le chemin absolu du module avec la notation par points, mais cela ne fonctionnait pas. Merci encore;) vous m'avez sauvé beaucoup de temps;) ps .: J'ai aimé que vous montriez comment importer un modèle d'une autre application aussi. C'est vraiment génial à savoir. : D –

+0

Je dois vous demander autre chose: dans quels autres endroits pourrais-je utiliser cette notation? post_save ... et des choses comme ça. –

+2

à peu près partout ailleurs, vous pouvez simplement déplacer l'instruction d'importation dans l'appel de fonction pour éviter les problèmes d'importation circulaire – second

Questions connexes