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

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

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

【问题讨论】:

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


【解决方案1】:

这取决于你所指的意思:

  1. 如果你只想做:from app1.models import MyModel1这个不需要任何特殊配置:只需将app1添加到INSTALLED_APPS,django就会直接识别它。
  2. 但是,如果您的意思是引用 外键,则您不需要导入模型,请执行以下操作:

    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,如果它们不同,很容易混淆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2018-03-24
  • 2011-09-19
  • 2019-05-17
  • 2021-11-09
  • 1970-01-01
  • 2013-10-04
相关资源
最近更新 更多