【问题标题】:avoid Circular import in Django避免在 Django 中循环导入
【发布时间】:2017-12-20 13:05:31
【问题描述】:

我有两个模型 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)

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

from .models import Action

def create_action(user, verb, target_name=None, target=None):
    action = Action(user=user, verb=verb, target=target)

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

from not.utils import create_action 

so Action Model 导入 Company Model as FK,utils 导入 Action Model,Company Model 导入 utils

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

ImportError: cannot import name 'Company'

我在这里看到一些 q/a 直接使用 import(没有 from)我试过但没有用

import not.utils as nt
nt.create_action(...)

【问题讨论】:

    标签: python django python-3.x django-models python-import


    【解决方案1】:

    改为从actions/models.pyuse a string 中删除Company 导入:

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

    【讨论】:

    • 在官方 Django 文档中,他们完全使用了这个概念。这是分配关系的正确方法。
    猜你喜欢
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 2017-09-27
    • 2017-08-12
    • 2021-12-04
    相关资源
    最近更新 更多