Django中应用间的外键关联

123 投票
3 回答
55118 浏览
提问于 2025-04-11 18:50

我在想,在Django的models.py文件中,是否可以定义一个外键,指向另一个应用里的表?

换句话说,我有两个应用,一个叫cf,另一个叫profiles。在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

我这样把两个应用联系在一起,是不是违反了规则,还是说我只是语法写错了?

3 个回答

10

好的,我明白了。你可以做到这一点,只需要使用正确的 import 语法。正确的写法是:

from prototype.cf.models import Movie

我之前的错误是没有在那一行中指定 .models 的部分。真是太糟糕了!

29

你也可以直接传递类本身:

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

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

根据文档,你的第二次尝试应该可以成功:

如果你想引用在其他应用中定义的模型,你需要明确指定应用的标签。比如,如果上面的Manufacturer模型是在另一个叫做production的应用中定义的,你就需要这样写:

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

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

撰写回答