避免在 Django 中循环导入

use*_*631 3 python django django-models python-import python-3.x

我有两个模型 Company 和 Actions:

from companies.models import Company

class Action(models.Model):

    company = models.ForeignKey(Company, blank=True, null=True, related_name='activity', on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

然后我在 utils.py 中有一个实用程序

from .models import Action

def create_action(user, verb, target_name=None, target=None):
    action = Action(user=user, verb=verb, target=target)
Run Code Online (Sandbox Code Playgroud)

我在公司模型中调用了这个实用程序def save,所以我有公司模型:

from not.utils import create_action 
Run Code Online (Sandbox Code Playgroud)

所以 Action Model 将 Company Model 导入为 FK,utils 导入 Action Model,Company Model 导入 utils

现在,由于循环导入,Django 给出了一个错误:

ImportError: cannot import name 'Company'
Run Code Online (Sandbox Code Playgroud)

我在这里看到了一些 q/a 直接使用导入(没有来自)我试过但没有奏效

import not.utils as nt
nt.create_action(...)
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 11

删除Company导入actions/models.py使用字符串代替:

class Action(models.Model):
    company = models.ForeignKey('companies.Company', blank=True, null=True, related_name='activity', on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)