chave estrangeira de uma aplicação para outra em Django

votos
64

Eu estou querendo saber se é possível definir uma chave estrangeira em um arquivo models.py em Django que é uma referência a uma tabela em outro aplicativo?

Em outras palavras, eu tenho dois aplicativos, chamados cf e perfis, e em cf / models.py eu tenho (entre outras coisas):

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

e em perfis / I models.py quer ter:

class MovieProperty(models.Model):
    movie = models.ForeignKey(Movie)

Mas eu não posso fazê-lo funcionar. Eu tentei:

    movie = models.ForeignKey(cf.Movie)

e eu tentei importar cf.Movie no início do models.py, mas eu sempre obter erros, tais como:

NameError: name 'User' is not defined

Estou quebrando as regras, tentando amarrar dois aplicativos juntos dessa maneira, ou eu só tenho a sintaxe errada?

Publicado 27/11/2008 em 14:24
fonte usuário
Em outras línguas...                            


3 respostas

votos
111

De acordo com os documentos, sua segunda tentativa deve funcionar:

Para se referir a modelos definidos em outro aplicativo, você deve em vez explicitamente especificar o rótulo do aplicativo. Por exemplo, se o modelo do fabricante acima é definido em outra produção aplicativo chamado, você precisa usar:

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

Você já tentou colocá-lo em aspas?

Respondeu 27/11/2008 em 15:27
fonte usuário

votos
19

Também é possível passar da própria classe:

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

class Car(models.Model):
    manufacturer = models.ForeignKey(production_models.Manufacturer)
Respondeu 30/09/2015 em 15:09
fonte usuário

votos
9

OK - Eu percebi isso. Você pode fazê-lo, você apenas tem que usar o direito importde sintaxe. A sintaxe correta é:

from prototype.cf.models import Movie

Meu erro foi não especificando a .modelsparte dessa linha. D'oh!

Respondeu 27/11/2008 em 15:26
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more