Issue
I have two apps: collection
and accounts
, with both having models defined. I'm importing a model ReporterProfile
from accounts
to collection
. Similarly, I'm importing a model Report
from collection
to accounts
.
The Report
model from collection
is called in a model class method in accounts
like this:
from collection.models import Report
class ReporterProfile(models.Model):
....
def published_articles_number(self):
num = Report.objects.filter(reporterprofile=self.id).count()
return num
Similarly, I am importing ReporterProfile
and User
models from accounts
to collection
model like this:
from accounts.models import ReporterProfile, User
from <project_name> import settings
class Report(models.Model):
reporterprofile = models.ForeignKey(ReporterProfile, on_delete=models.CASCADE, verbose_name="Report Author")
...
class Comment(models.Model):
report = models.ForeignKey(Report, on_delete=models.CASCADE, related_name='comments')
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name="Comment by")
...
When running the server or makemigrations, I get the error:
File "F:\project_name\accounts\models.py", line 8, in <module>
from collection.models import Report
File "F:\project_name\collection\models.py", line 2, in <module>
from accounts.models import ReporterProfile, User
ImportError: cannot import name 'ReporterProfile' from partially initialized module 'accounts.models' (most likely due to a circular import) (F:\project_name\accounts\models.py)
I think the error is coming because of a wrong importing pattern. What should I do?
Solution
For ForeignKey
:
Instead of using reporterprofile = models.ForeignKey(ReporterProfile, ...)
, you can use reporterprofile = models.ForeignKey("accounts.ReporterProfile", ...)
, so you don't have to import the model.
For preventing circulor import error :
Instead of using :
from accounts.models import ReporterProfile
[...]
foo = ReporterProfile()
You can use:
import accounts.models
[...]
foo = accounts.models.ReporterProfile()
Answered By - Blusky
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.