2008-11-27 3 views
62

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

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

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

ответ

105

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

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

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

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

+1

УДИВИТЕЛЬНЫЙ ... спаситель жизни – Soask 2012-07-10 11:53:10

8

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

from prototype.cf.models import Movie 

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

+6

Иногда вы должны использовать кавычки и не импортирует, как вы можете получить файлы импортирующие друг друга. – 2012-03-01 04:29:50

18

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

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

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