Reputation: 395
I have two models named as User and Newspaper. User can be author or reader and both are in the same model. So Newspaper has an author and it can create many newspapers. Reader has favorites and he can add as many newspapers as he want.
Question: How to solve circular import between two modules?
Extra info:
user
and newspaper
are two different apps.
├── project
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
├── newspaper
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── user
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ ├── 0001_initial.py
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
newspaper/models.py
class NewsPaper(models.Model):
title = models.CharField(max_length=255)
file = models.FileField(upload_to=get_file_upload_path)
author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE,
related_name="created_newspaper")
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title[:20] + '...' if len(self.title) > 20 else self.title
user/models.py
class User(AbstractBaseUser, PermissionsMixin):
phone_number = models.CharField(max_length=20, unique=True,
validators=[validate_phone_number])
firstname = models.CharField(max_length=255)
lastname = models.CharField(max_length=255)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
favorites = models.ManyToManyField(NewsPaper)
objects = UserManager()
USERNAME_FIELD = 'phone_number'
@property
def my_uploaded_content(self):
return self.created_newspaper.all()
def __str__(self):
return f'{self.firstname} {self.lastname}'
Upvotes: 1
Views: 231
Reputation: 2752
You can use ForeignKey without import this way:
class User(AbstractBaseUser, PermissionsMixin):
...
favorites = models.ManyToManyField('newspaper.NewsPaper')
...
Upvotes: 2