30 votes

Impossible d'importer des modèles d'une autre application dans Django

J'ai donc 2 applications qui tournent dans le même projet.

Mes dossiers sont structurés comme suit :

/project_codebase
    /project
        __init.py
        settings.py
        urls.py
        wsgi.py
        ...    
    /app1
        ...
    /app2
        ...
    manage.py

Donc, pour une raison étrange, j'ai un nom différent pour mon répertoire de base (c'est-à-dire qu'il se termine par codebase). J'espère que ce n'est pas un problème.

En mi settings.py J'ai ceci :

INSTALLED_APPS = [
    ...

    'app1',
    'app2',
]

Ok, donc dans mon models.py (depuis app2) Je peux facilement importer des modèles de l'application 1 avec from app1.models import * Cependant, lorsque j'utilise from app2.models import * dans mon models.py (de l'application 1) J'obtiens une erreur d'importation (ImportError).

Des solutions à ce problème ?

0voto

Markus Points 194

Assurez-vous qu'il n'y a pas de conflit de nom entre l'une de vos applications et l'un des modules installés dans votre environnement Python. Si vous utilisez pip, vous pouvez exécuter pip freeze pour obtenir la liste des modules installés.

J'ai eu la même erreur lorsque l'une de mes applications s'appelait "packaging" et que le module python "packaging" était installé.

0voto

Je rencontre également ce problème lorsque j'essaie d'importer mon modèle à partir d'une autre application dans (django2.2)

Mais finalement je l'ai importé et il fonctionne avec succès.

Voici mes deux applications :

INSTALLED_APPS = [
    ...

    'categories',
    'videos',
]

et voici le code pour l'importer dans videos/models.py en tant que fichier Clé étrangère Connectivité

from django.db import models

class Videos(models.Model):
    categories = models.ForeignKey('categories.Categories', related_name='categories', on_delete=models.CASCADE)

Si vous voulez voir mes catégories Modèle de categories/models.py vous pouvez vérifier ce code, sinon négligez-le

from django.db import models

class Categories(models.Model): 
    category_name = models.CharField(max_length=50)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

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