Django模型混入导入依赖模型

0 投票
1 回答
601 浏览
提问于 2025-04-18 06:32

在一个Django 1.6的项目中,我使用了一种模型结构,其中有外键依赖关系,如下所示。在我的ParentModel方法的混合类中,我需要添加一个方法,这个方法可以创建新的ChildModel实例,并且在这个方法的上下文中,父级的外键应该是“self”。

我已经成功地通过在ParentModel的方法中导入ChildModel来实现这一点,但我在想有没有更简单的方法来做到这一点。当我尝试在mixins.py的顶部直接导入Child模型时,我遇到了导入错误,我想这可能是由于交叉导入造成的。

有没有办法避免在ParentModel方法中进行导入呢?

如果没有,出于好奇,从方法内部动态导入Child模型会有什么额外的开销?或者说,Python每次都会导入这个方法吗,还是说这个代码会以某种方式被缓存?

models.py

from .mixins import ParentMixins

class ParentModel(models.Model, ParentMixins):
    name = models.TextField()

class ChildModel(models.Model):
    parent = models.ForeignKey(ParentModel)

mixins.py

class ParentMixins(object):
     def create_child(self):
         from .models import ChildModel
         ChildModel.create(parent=self)

1 个回答

1

假设你可以确保任何类都没有为父字段定义一个相关名称,那么你可以在你的 create_child 方法里直接这样做:

self.childmodel_set.create()

这样就完全不需要进行导入了。

(不过我得承认,我对有一个混合类依赖于它自己并没有提供的具体模型中的字段这件事有点困惑。)

撰写回答