Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 238
Rob Golding Avatar asked May 21 '09 22:05

Rob Golding


1 Answers

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.

like image 127
Daniel Roseman Avatar answered Oct 06 '22 00:10

Daniel Roseman