在Django中从一个应用程序到另一个应用程序的外键

Posted

技术标签:

【中文标题】在Django中从一个应用程序到另一个应用程序的外键【英文标题】:Foreign key from one app into another in Django 【发布时间】:2010-09-24 08:06:39 【问题描述】:

我想知道是否可以在 Django 的 models.py 文件中定义一个外键来引用另一个应用程序中的表?

换句话说,我有两个应用程序,分别称为 cf 和配置文件,在 cf/models.py 我有(除其他外):

class Movie(models.Model):
    title = models.CharField(max_length=255)

在profiles/models.py中我想要:

class MovieProperty(models.Model):
    movie = models.ForeignKey(Movie)

但我无法让它工作。我试过了:

    movie = models.ForeignKey(cf.Movie)

我也试过在models.py开头导入cf.Movie,但是总是报错,比如:

NameError: name 'User' is not defined

我试图以这种方式将两个应用程序绑定在一起是违反规则,还是我只是语法错误?

【问题讨论】:

【参考方案1】:

根据文档,您的第二次尝试应该有效:

要引用在另一个应用程序中定义的模型,您必须改为显式指定应用程序标签。例如,如果上面的制造商模型是在另一个名为 production 的应用程序中定义的,您需要使用:

class Car(models.Model):
    manufacturer = models.ForeignKey('production.Manufacturer')

你试过用引号括起来吗?

【讨论】:

相关文档可见here 可以在多个应用程序中使用外键吗?我正在做一个项目,该项目有许多应用程序,项目中的许多应用程序具有许多外键。仅供参考,我已经开始了这个问题,但正在等待答案。 ***.com/questions/55213918/… 晚了,我知道,但这主要是选择和组织的问题。我有从未打算供外部使用的“内部”应用程序。它们可以相互依赖,主要是为了给我一个方便的文件和命名空间组织。外部应用程序(例如来自 DjangoPackages)和我有一天可能会贡献给公众的应用程序,需要尽可能地保持免费的依赖关系(尽管依赖于其他一些得到良好支持的公共领域应用程序可能没问题。很多公共用户相关的应用程序依赖于 Django 的用户/组/权限模型)。 谢谢,这对我有用。通过添加引号,我们不需要导入类。但是我想知道如果我们决定导入该类是否有任何区别,例如@andorov 给出的另一个很好的例子?【参考方案2】:

也可以传递类本身:

from django.db import models
from production import models as production_models

class Car(models.Model):
    manufacturer = models.ForeignKey(production_models.Manufacturer)

【讨论】:

【参考方案3】:

好的 - 我已经想通了。你可以做到,你只需要使用正确的import 语法。正确的语法是:

from prototype.cf.models import Movie

我的错误是没有指定该行的.models 部分。哦!

【讨论】:

有时你必须使用引号而不是导入,因为你可能会得到相互导入的文件。

以上是关于在Django中从一个应用程序到另一个应用程序的外键的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中从一页转到另一页

如何在kotlin中从一个片段转到另一个片段?

如何在 WPF 中从一个窗口移动到另一个窗口?

当我在基于选项卡的应用程序中从一个控制器导航到另一个控制器时,tabBar 被隐藏

在 Django 中从外键设置会话变量:需要字段名而不是主键

在 Laravel 6 中从外键获取数据