115

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

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

4

3 回答 3

174

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

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

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

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

于 2008-11-27T14:27:45.400 回答
29

也可以传递类本身:

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

class Car(models.Model):
    manufacturer = models.ForeignKey(production_models.Manufacturer)
于 2015-09-30T15:09:36.443 回答
10

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

from prototype.cf.models import Movie

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

于 2008-11-27T14:26:28.103 回答