在Django中如何获取另一个应用程序中的模型引用?

5
我原以为这个问题应该很简单,但我找不到解决方法。我有两个应用程序“library”和“counts”。我想从“counts”中获取对“library”中模型的引用。这两个应用程序都在settings.INSTALLED_APPS中注册。
我的项目在一个名为“slideaudit”的虚拟环境中。其中有一个名为“src”的项目文件夹。我的应用程序也在“src”下,还有conf文件夹。
我原以为我可以写出类似这样的代码: from project_name.app_name.models import model_name 尽管有相当多的帖子讨论了这个问题,但我没有找到解决方案。请问有什么建议吗?

你在settings.py中配置了BASE_DIR常量吗? - SebasSBM
如果你的应用程序位于src内部,那么你在尝试导入时应该在路径中使用src,对吧? - Daniel Roseman
1个回答

13

这取决于您所说的"reference"是什么意思:

  1. 如果你只想要做这个:from app1.models import MyModel1,那么这不需要任何特殊配置: 只需将app1添加到INSTALLED_APPS中,Django就会直接识别它。
  2. 但是,如果您所说的"reference"是指外键,您甚至不需要导入您的模型,您只需按照以下步骤:

    class NyModel2(model.Model):
        field = models.ForeignKey("app1.MyModel1", verbose_name="my_model1", related_name="my_models2")
    
    • Django将理解您需要来自app1MyModel1模型
    • related_name属性指定反向关系的名称,这意味着my_model1.my_models2.all()将返回所有具有my_model1作为外键的MyModel2实例。

我指的是“外键引用”。感谢您同时提到了这两种方法。 - Chas
另外 - 我正在使用PyCharm。当我在app2(models或views)中使用:from app1.models import MyModel1时,PyCharm会报告“未解决的引用”。但是,它可以完美地工作。我一直信任PyCharm会告诉我一切是否正常,虽然它做得很好,但似乎并不是100%准确。 - Chas
1
如果您正在使用虚拟环境,您应该在PyCharm中进行配置,以便它可以识别应用程序路径。否则,您可以查看PyCharm论坛,我相信您可以在那里找到更好的答案 ;) - Dhia
请注意,正确的写法是 app_label.model_name 而不是 app_name.model_name。如果它们不同,很容易混淆。 - run_the_race

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接