Подтвердить что ты не робот

Внешний ключ из одного приложения в другое в 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

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

4b9b3361

Ответ 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'о!