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.