Внешний ключ из одного приложения в другое в Django
Мне интересно, можно ли определить внешний ключ в файле models.py в Django, который является ссылкой на таблицу в другом приложении?
Другими словами, у меня есть два приложения, называемые cf и профили, и в cf/models.py у меня есть (среди прочего):
class Movie(models.Model):
title = models.CharField(max_length=255)
и в профилях /models.py Я хочу иметь:
class MovieProperty(models.Model):
movie = models.ForeignKey(Movie)
Но я не могу заставить его работать. Я пробовал:
movie = models.ForeignKey(cf.Movie)
и я попытался импортировать cf.Movie в начале models.py, но всегда получаю ошибки, например:
NameError: name 'User' is not defined
Я нарушаю правила, пытаясь связать два приложения вместе таким образом, или я просто получил синтаксис неправильно?
Ответы
Ответ 1
Согласно документам, ваша вторая попытка должна работать:
Чтобы ссылаться на модели, определенные в другом приложении, вы должны явно указывать метку приложения. Например, если модель производителя выше определена в другом приложении, называемом production, вам нужно будет использовать:
class Car(models.Model):
manufacturer = models.ForeignKey('production.Manufacturer')
Вы пытались помещать его в кавычки?
Ответ 2
Также можно передать сам класс:
from django.db import models
from production import models as production_models
class Car(models.Model):
manufacturer = models.ForeignKey(production_models.Manufacturer)
Ответ 3
ОК - Я понял это. Вы можете это сделать, вам просто нужно использовать правильный синтаксис import
. Правильный синтаксис:
from prototype.cf.models import Movie
Моя ошибка не указала часть .models
этой строки. D'о!