ChatGPT解决这个技术问题 Extra ChatGPT

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

我想知道是否可以在 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

我是否通过尝试以这种方式将两个应用程序绑定在一起而违反了规则,或者我只是语法错误?


M
Michael Warkentin

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

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

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

你试过把它放在引号里吗?


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

也可以传递类本身:

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

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

J
Jan

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

from prototype.cf.models import Movie

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


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

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅