web-dev-qa-db-ja.com

Djangoのあるアプリから別のアプリへの外部キー

別のアプリのテーブルへの参照であるDjangoのmodels.pyファイルで外部キーを定義できるかどうか疑問に思っていますか?

言い換えると、cfとprofilesという2つのアプリがあり、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

この方法で2つのアプリを一緒にしようとすることで規則を破っていますか、それとも構文が間違っていますか?

83
Ben

ドキュメントによると、2回目の試行は機能するはずです。

別のアプリケーションで定義されたモデルを参照するには、代わりにアプリケーションラベルを明示的に指定する必要があります。たとえば、上記のManufacturerモデルがproductionと呼ばれる別のアプリケーションで定義されている場合、次を使用する必要があります。

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

引用符で囲んでみましたか?

136

クラス自体を渡すこともできます。

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

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

OK-私はそれを理解しました。できます。正しいimport構文を使用するだけです。正しい構文は次のとおりです。

from prototype.cf.models import Movie

私の間違いは、その行の.models部分を指定していなかったことです。ど!

9
Ben