Search code examples
pythondjangodependencies

Django App Dependency Cycle


I am in the middle of developing a Django application, which has quite complicated models (it models a university - courses, modules, lectures, students etc.)

I have separated the project into apps, to make the whole thing more organised (apps are courses, schools, people, modules and timeperiods). I am having a problem whereby a model in one app may depend on a model in another - so I must import it. The second app then in turn depends on a model in the first, so there is a cycle and Python throws up an error.

How do people deal with this? I understand that apps should be relatively "independent", but in a system like this it doesn't make sense, for example, to use ContentTypes to link students to a module.

Does anyone have a similar project that could comment on this case?


Solution

  • If your dependency is with foreign keys referencing models in other applications, you don't need to import the other model. You can use a string in your ForeignKey definition:

    class MyModel(models.Model):
        myfield = models.ForeignKey('myotherapp.MyOtherModel')
    

    This way there's no need to import MyOtherModel, so no circular reference. Django resolves the string internally, and it all works as expected.