在 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 - 按模型名称获取 ContentType 模型(通用关系)