我有两个模型,分别命名为用户和报纸。用户可以是作者,也可以是读者,两者在同一个模型中。报纸有一个作者,它可以创建许多报纸,读者有一个收藏夹,他可以添加任意多的报纸。读者有一个收藏夹,他可以添加任何他想要的报纸。
问题:如何解决两个模块之间的循环导入?如何解决两个模块之间循环导入的问题?
额外的信息。user
和 newspaper
是两个不同的应用程序。
├── 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
newsapermodels.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
usermodels.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}'
你可以使用ForeignKey而不导入这种方式。
class User(AbstractBaseUser, PermissionsMixin):
...
favorites = models.ManyToManyField('newspaper.NewsPaper')
...