Внешний ключ из одного приложения в другое в Django


мне интересно, можно ли определить внешний ключ в a models.py файл в Django, который является ссылкой на таблицу в другом приложении?

другими словами, у меня есть два приложения, называемые 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)

и я пробовал импортировать cf.Фильм в самом начале models.py, но я всегда получаю ошибки, такие как:

NameError: name 'User' is not defined

я нарушаю правила, пытаясь связать два приложения вместе таким образом, или я просто получил синтаксис неправильно?

3 69

3 ответа:

согласно документам, ваша вторая попытка должна работать:

чтобы ссылаться на модели, определенные в другом приложении, необходимо явно указать метку приложения. Например, если модель производителя выше определена в другом приложении под названием production, вам нужно будет использовать:

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

вы пробовали поставить его в кавычки?

также можно передать сам класс:

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

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

хорошо-я понял это. Вы можете сделать это, вы просто должны использовать право import синтаксис. Правильный синтаксис:

from prototype.cf.models import Movie

моя ошибка не была указана .models часть этой линии. О!