Внешний ключ из одного приложения в другое в Django - PullRequest
82 голосов
/ 27 ноября 2008

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

Другими словами, у меня есть два приложения, которые называются cf и profile, и в cf / models.py у меня есть (среди прочего):

class Movie(models.Model):
    title = models.CharField(max_length=255)

и в profile / 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

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

Ответы [ 3 ]

133 голосов
/ 27 ноября 2008

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

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

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

Вы пытались поместить это в кавычки?

22 голосов
/ 30 сентября 2015

Также можно пройти сам класс:

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

class Car(models.Model):
    manufacturer = models.ForeignKey(production_models.Manufacturer)
9 голосов
/ 27 ноября 2008

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

from prototype.cf.models import Movie

Моя ошибка не заключалась в указании .models части этой строки. D'ой!

...