68๐
This might be due to circular import issues. To avoid this you should load the model dynamically:
For recent versions of django (1.7+) use the application registry:
from django.apps import apps
MyModel1 = apps.get_model('app1', 'MyModel1')
For earlier django versions (<1.7):
from django.db.models.loading import get_model
MyModel1 = get_model('app1', 'MyModel1')
Note 1: If you want to define a ForeignKey relationship, there is no need for a separate import statement. Django has you covered on this:
If app1
is an installed app, you should define the ForeignKey relationship as follows:
# in app2.py
class MyModel2(models.Model):
mymodel1 = models.ForeignKey('app1.MyModel1')
Note 2: The get_model
only works if app1
is an installed app and MyModel1
is the model you want to import from app1
.
Note 3: Try to avoid wildcard import (from ... import *
), as this is bad practice.
11๐
Itโs definitely a circular import.
But i think is what you need is to use models as some sort of RetationFields(ForeignKey
, ManyToManyField
or OneToOneField
) arguments. So you need to skip import and use as so:
# app1/models.py
class Model1(models.Model):
relation_field = models.ForeignKey('app2.Model2')
From docs:
If you need to create a relationship on a model that has not yet been defined, you can use the name of the model, rather than the model object itself
To refer to models defined in another application, you can explicitly specify a model with the full application label
Just put str
object as first argument to relation fields that leeds to <app_name>.<Model_name>
.
Note: itโs better to avoid importing everything from module(from <module_name> import *
)
- [Django]-How to disable formatting for FloatField in template for Django
- [Django]-Programmatically saving image to Django ImageField
- [Django]-How to set the timezone in Django
5๐
If you want to import only some specific module then do not use import *
.
It will take more time load your all library and so can affect the speed of your app also.
If you want to use few modules from your second app then just add module name instead of whole libraries something like this:
from app2.models import Module1, Module2
or it may be circular import issue as other clarify.
Thanks.
- [Django]-Django: request.GET and KeyError
- [Django]-Django: When to use QuerySet none()
- [Django]-"<Message: title>" needs to have a value for field "id" before this many-to-many relationship can be used.
3๐
i use this code always and itโs work ๐
from position_app.models import Member
- [Django]-Passing variable urlname to url tag in django template
- [Django]-Restrict django FloatField to 2 decimal places
- [Django]-Accelerate bulk insert using Django's ORM?
1๐
You need to specify the model names you want to import, for ex from app1.models import ModelName1, ModelName2
.
- [Django]-How can I get MINIO access and secret key?
- [Django]-How to limit a view to superuser only?
- [Django]-Django โ Can't get static CSS files to load
0๐
Make sure there is no name clash between one of your apps and one of the modules installed in your Python environment. If you use pip, you can run pip freeze
to see a list of installed modules.
I had the same error when one of my apps was named โpackagingโ, and the packaging python module was installed.
- [Django]-Django: Use of DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT in settings.py?
- [Django]-Django CSRF framework cannot be disabled and is breaking my site
- [Django]-Django โ "no module named django.core.management"
0๐
I also face this problem when I try to import my model from another app in (django2.2)
But at last I Imported It and Its successfully working.
here is my two app:
INSTALLED_APPS = [
...
'categories',
'videos',
]
and this is the code for how I Imported it into videos/models.py file as a ForeignKey Connectivity
from django.db import models
class Videos(models.Model):
categories = models.ForeignKey('categories.Categories', related_name='categories', on_delete=models.CASCADE)
If want to see my Categories Model from categories/models.py file, you can check this code otherwise neglect it
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)
- [Django]-Warning: cannot find svn location for distribute==0.6.16dev-r0
- [Django]-Django humanize outside of template?
- [Django]-Django: Safely Remove Old Migrations?
0๐
It is a circular import
In my case I needed the imported class not for a relation field, but for use it inside a method instead.
If thatโs the case, I suggest to import inside the method, otherwise an AppRegistryNotReady(โModels arenโt loaded yet.โ) is raised.
class Student(CustomUser):
""" Usuario alumno """
class Meta:
verbose_name = "Alumno"
verbose_name_plural = "Alumnos"
def get_current_school_class(self):
""" Obtiene el curso actual de un alumno """
from school.models import SchoolClass, StudentClass
# proceed with the method...
- [Django]-What is the difference between null=True and blank=True in Django?
- [Django]-Django character set with MySQL weirdness
- [Django]-Not able to create super user with Django manage.py
0๐
itโs not necessary to import models from others apps
just put the app.models in the foreignkey field and thatโs work ๐
app 1:
class model1(models.Model):
field=models.field type ...
app 2:
class model2(models.Model):
field=models.ForeignKey('app1.model1', on_delete. ...)
to avoid code correction ๐
- [Django]-Django: relation "django_site" does not exist
- [Django]-How to pass an array in Django to a template and use it with JavaScript
- [Django]-How to use django 3.0 ORM in a Jupyter Notebook without triggering the async context check?