Django의 한 앱에서 다른 앱으로의 외래 키


99

Django의 models.py 파일에서 다른 앱의 테이블에 대한 참조 인 외래 키를 정의 할 수 있는지 궁금합니다.

즉, cf와 profiles라는 두 개의 앱이 있고 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)

models.py 시작 부분에서 cf.Movie 가져 오기를 시도했지만 항상 다음과 같은 오류가 발생합니다.

NameError: name 'User' is not defined

이런 식으로 두 개의 앱을 연결하여 규칙을 위반하고 있습니까? 아니면 구문이 잘못 되었습니까?

답변:


153

문서에 따르면 두 번째 시도는 효과가 있습니다.

다른 애플리케이션에 정의 된 모델을 참조하려면 애플리케이션 레이블을 명시 적으로 지정해야합니다. 예를 들어 위의 제조업체 모델이 프로덕션이라는 다른 애플리케이션에 정의 된 경우 다음을 사용해야합니다.

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

따옴표에 넣어 보셨습니까?


1
관련 문서는 여기
Nathan Jones

많은 앱에서 외래 키를 사용해도 괜찮습니까? 나는 프로젝트 내의 많은 앱에서 많은 외래 키가있는 많은 앱을 가진 프로젝트를하고 있습니다. 참고로, 나는 이미 질문을 시작했지만 답변을 기다리고 있습니다. stackoverflow.com/questions/55213918/...
티안 룬에게

늦게 알고 있지만 대부분 선택과 조직의 문제입니다. 외부 용이 아닌 "내부"앱이 있습니다. 이들은 서로 의존 할 수 있으며 주로 파일과 네임 스페이스의 편리한 구성을 제공하기 위해 존재합니다. 외부 앱 (예 : DjangoPackages)과 내가 언젠가 공개에 기여할 수있는 앱은 가능한 한 이러한 종속성을 무료로 유지해야합니다 (잘 지원되는 다른 공개 도메인 앱에 대한 종속성은 괜찮을 수 있습니다. 공개 사용자 관련 앱은 Django의 사용자 / 그룹 / 권한 모델에 따라 다릅니다.
nigel222

24

클래스 자체를 전달할 수도 있습니다.

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

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

9

좋아-알아 냈어. 할 수 있습니다 import. 올바른 구문 을 사용하기 만하면 됩니다. 올바른 구문은 다음과 같습니다.

from prototype.cf.models import Movie

내 실수는 .models그 줄 의 일부를 지정하지 않았습니다 . 오!


11
서로 가져 오는 파일을 가져올 수 있으므로 가져 오기가 아닌 따옴표를 사용해야하는 경우가 있습니다.
Sam Stoelinga
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.