Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django - import model from another project

Tags:

django

model

I've never done such thing so i'm not sure what would be the best approach for solving this problem:

I have two Django projects:

root/
    project1/
            manage.py
            project1/
                    models.py
                    urls.py
                    ...
    project2/
            manage.py
            project2/
                    models.py
                    urls.py
                    ...

Those projects use same database, they have around 10 models (database tables) each and some of the models overlap: Project1 needs ForeignKey from one fo the Project2's models, but also Project2 needs ForeignKey from one of the Project1's models:

Project1:

class Area_model(models.Model):
    name = models.CharField(max_length=25)
    url = models.CharField(max_length=25)

class Question_model(models.Model):
    text = models.TextField(max_length=1000)
    date = models.CharField(max_length=40)
    answer = models.SmallIntegerField()
    ...
    employee = models.ForeignKey(Employee_model)

Project2:

class Employee_model(models.Model):
    name = models.CharField(max_length=15)
    adress = models.CharField(max_length=15)
    area = models.ForeignKey(Area_model)

I tried to import project1.models into project2's models.py but it says 'unknown module'. I need to import project1 to project2 and reverse, is that going to be a problem? (circular reference?) If so, how can i accomplish this in some other way?

like image 511
Ljubisa Livac Avatar asked Jun 22 '16 07:06

Ljubisa Livac


People also ask

How import all models in Django?

To do this, create a directory called /«project»/«app_name»/models , inside it put __init__.py (to declare it as a module) and then create your files inside there. You then need to import your file contents into the module in __init__.py . You should read about Python modules to understand this.

What is a Django app?

A Django application is a Python package that is specifically intended for use in a Django project. An application may use common Django conventions, such as having models , tests , urls , and views submodules.


1 Answers

In your WSGI.py, add the path of your second project to the sys.path by sys.path.append('/root').

In your settings.py of the first project, add 'project2.app2' to the INSTALLED_APPS list:

INSTALLED_APPS = [
    ...
    'app1',
    'project2.app2',
    ...
]

And then you should be able to easily import the models of your second project by using from project2.project2.models import *

At least that is how it worked for me.

like image 108
Andrea Avatar answered Nov 15 '22 10:11

Andrea