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

Posted

技术标签:

【中文标题】在 Django 中获取对另一个应用程序中模型的引用【英文标题】:In Django get a reference to a model in another app 【发布时间】:2016-03-15 01:25:44 【问题描述】:

我原以为这会相对简单,但我找不到解决方案。我有两个应用程序“库”和“计数”。我想从“计数”内部获取对“库”中模型的引用。这两个应用程序都在 settings.INSTALLED_APPS 中注册。 我的项目位于名为“slideaudit”的 virtualenv 中。在那是名为“src”的项目文件夹。我的应用程序位于“src”以及 conf 文件夹下。 我想我会写一些类似的东西: 从 project_name.app_name.models 导入模型名称

虽然似乎有很多关于这个问题的帖子,但我还没有找到一个可以完成这项工作的帖子。请问有什么想法吗?

【问题讨论】:

你在settings.py中配置了BASE_DIR常量吗? Django using model of one app into other app's model的可能重复 如果您的应用位于src 中,那么您肯定应该在尝试导入的路径中使用src,不是吗? 【参考方案1】:

这取决于你所指的意思:

    如果你只想做:from app1.models import MyModel1这个不需要任何特殊配置:只需将app1添加到INSTALLED_APPS,django就会直接识别它。

    但是,如果您的意思是引用 外键,则您不需要导入模型,请执行以下操作:

    class NyModel2(model.Model):
        field = models.ForeignKey("app1.MyModel1", verbose_name="my_model1", related_name="my_models2")
    
    django 会明白你需要来自app1 的模型MyModel1 related_name 属性指定反向关系的名称,这意味着my_model1.my_models2.all() 返回所有以 my_model1 作为外键的 MyModel2 实例。

【讨论】:

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

以上是关于在 Django 中获取对另一个应用程序中模型的引用的主要内容,如果未能解决你的问题,请参考以下文章

在 django 中获取继承的模型对象

Django 中的应用程序级别设置

如何从 django 的模型中获取一个字段

Django - 按模型名称获取 ContentType 模型(通用关系)

无法在 Django Rest Framework 序列化程序的验证数据中获取非模型字段

Django Rest Framework - 在序列化程序中获取相关模型字段