2

I'm building django application and i encounter som import problems. My file structure:

project/
  my_app/
    models/
      __init__.py
      Article.py
      StockMovementProduct.py
    tools/
      __init__.py
      Synchronizer.py

project/my_app/models/_init_.py:

from Article import *
from StockMovementProduct import *

project/my_app/models/Article.py:

from django.db import models

class Article(models.Model):
[...]

project/my_app/models/StockMovementProduct.py:

from django.db import models
from my_app.tools import Synchronizer

class StockMovementProduct(models.Model):
  def sync_articles(self):
    sync = Synchronizer(self)
[...]

project/my_app/tools/_init_.py is empty

project/my_app/tools/Synchronizer.py:

from my_app.models import Article
from my_app.models import StockMovementProduct

class Synchronizer():
[...]

When i run my code this error is raise:

  File "/home/bux/Projets/project/my_app/models/__init__.py", line 7, in <module>
    from StockMovementProduct import *
  File "/home/bux/Projets/project/my_app/models/StockMovementProduct.py", line 5, in <module>
    from my_app.tools import Synchronizer
  File "/home/bux/Projets/project/my_app/tools/Synchronizer.py", line 2, in <module>
    from my_app.models import StockMovementProduct
ImportError: cannot import name StockMovementProduct

I don't understand why (in Synchronizer.py) Article import work and StockMovementProduct import don't.

In Synchronizer.py i also try:

from my_app.models import Article
from ..models import StockMovementProduct

But without success. What i'm missing with import methodology ?

bux
  • 7,087
  • 11
  • 45
  • 86

2 Answers2

2

You have a circular import in your code, namely your StockMovementProduct.py imports Synchronizer.py and yet Synchronizer.py imports StockMovementProduct.py. This is a pretty common problem and there are already a lot of help on that: Circular dependency in Python.

Community
  • 1
  • 1
Alexander Zhukov
  • 4,357
  • 1
  • 20
  • 31
2

You have a circular import. StockMovementProduct imports Synchronizer, and Synchronizer imports StockMovementProduct.

You need to re structure and maybe move the common dependancies into a 3rd file. It's difficult to suggest a solution though without knowing the content

GP89
  • 6,600
  • 4
  • 36
  • 64