Django中应用间的外键关联
我在想,在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')
你试过把它放在引号里吗?