2013-05-22 3 views
1

장고 웹 사이트에서 몇 가지 예제를 따라 갔고 장고가 프로젝트 조각을 '앱'으로 분리하기를 바랍니다.장고 모델 작성 방법 이해하기

각 'app'에는 자체 모델이 있습니다. 따라서 사용자가 도서 및 소장 컬렉션과 같은 일부 데이터 (추가/수정/삭제)를 로그인하고 수정할 수있는 앱을 만들고 싶다면이를 위해 앱을 만들어야합니다. BookAuthor :

이 경우에는 내가 두 모델 클래스를 가진 '응용 프로그램' models.py을 포함 을 할 것입니다. Book 클래스는 해당 필드 중 하나 인 author = models.ForeignKey(Author)을가집니다. 내가 그 응용 프로그램의 새로운 app 할 수있는 내 모델을 만들 때와 같은 app에 거주하지 않는 모델에 외래 키 필드를 포함 할 경우

  1. :

    그래서 여기 내 질문입니까?

  2. 앞서 언급했듯이 사용자가 로그인 할 수있는 자격 증명 '테이블'을 갖고 싶습니다. 이것이 어떻게 성취 될 수 있습니까? 사용자 모델로 '사용자'와 같은 새로운 '앱'을 시작해야합니까?
  3. 이러한 모드에 '자동 증가', '고유하지 않은 색인'및 '트리거'와 같은 MySQL 기능을 통합하려면 어떻게해야합니까? 아니면 수동으로 또는 MySQL 콘솔/관리자를 통해 수행해야합니까?
+1

아래 답변 중 하나가 귀하의 질문에 완전히 답변 한 경우 계속해서 동의하십시오. 그렇지 않으면 명확히하기 위해 할 수있는 일을 알려주십시오. – Jacinda

+0

나는 두 답을 좋아한다! – 40Plot

+0

하하 - 시스템이 작동 중임을 의미합니다. SO에 오신 것을 환영합니다! – Jacinda

답변

1

다른 앱의 모델과 관계를 맺는 것을 방지하지 못합니다. 앱은 단순히 논리적 인 장소에 코드를 그룹화하는 방법입니다. 다음은 다른 앱에있는 하나의 모델을 참조하는 방법의 예입니다.

myapp라는 모듈에 있다고 가정하면 다음과 유사한 구문으로 다른 앱의 다른 모델을 참조 할 수 있습니다. 이 예제에서는 "인증"앱 내부에 User 모델이 있습니다.

class MyModel(models.Model): 
    .... 
    user = models.ForeignKey('auth.User') 

또한 참조 : https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey

장고가 내장되어 제공 위대하고 유연한 사용자 시스템이 있습니다. 새 프로젝트를 시작하면 기본적으로 사용자를 생성, 관리 및 인증하는 데 사용할 수있는 User 테이블이 만들어집니다.

여기에 몇 가지 관련 있습니다 information.(실제로 위의 예는 내장 된 사용자 테이블과의 관계를 보여줍니다.) 사용자 정의 프레임 워크의 기본 동작을 사용자 정의하려는 경우가 아니면 사용자 정의를 위해 새 응용 프로그램을 시작할 필요가 없습니다.

장고는 기본 키 필드 레코드를 자동으로 증가시킵니다. 이를 위해 필요한 데이터베이스 오브젝트를 작성합니다. 또한 원하는 경우 고유 한 필드를 적용하고 다른 사용자 정의를 허용합니다. 내가 아는 한, 장고는 데이터베이스 트리거를 지원하지 않는다. 나는 물건을 방아쇠시키는 "Pythonic"방법이 당신의 코드에서 그렇게 할 수 있다고 생각한다. 특히 장고/파이썬은 다른 사람들이 취한 행동을 관리합니다. 그건 내 생각 뿐이야.

1
  1. 예. 예. 이 질문을 참조하십시오 : Foreign key from one app into another in Django
  2. 장고의 기본 제공 auth app 및 User 객체를 사용할 수 있습니다. 그것은 "배터리 포함"기능 중 하나입니다. herehere을 참조하십시오.
  3. 은 MySQL과 관련하여 많은 경험이 있지만, 언급 한 내용 중 일부는 ORM에 내장되어 있습니다. 나는. 다른 기본 키 (AutoField reference)를 지정하지 않으면 자동 증가 이 기본 ID 필드와 함께 자동으로 발생합니다. Non-unique indices이 Django 1.5부터 추가되었습니다. 방아쇠는 조금 까다로워 보이지만, this blog post은 좋은 글씨처럼 보입니다.

제쳐두고, Django aggregation topic guide은 저자 및 도서 모델을 주요 예로 사용합니다.

+0

글 머리 기호 # 1의 보조 노트와 마찬가지로 장고가 자랑하는 기능 중 하나는 "플러그 가능한 앱"입니다. 기본적으로 무엇이 이라는 의미는'Books' 앱을 가져갈 수 있어야하고 은 내 라이브러리 앱에 연결하면 상자가 곧바로 작동합니다. 다른 앱을 참조하는 앱을 가지고 있다면 은이 다른 앱에'Books' 앱을 성공적으로 연결했고, 사용자는 디커플링을 할 수 없습니다. 이것은 장고와 함께 더 큰 시스템을 만들 때 단점 중 하나입니다. 그걸 부르고 싶다면 분명 "비즈니스 로직 레이어"가 없습니다. –

+0

@limelights 당신은 완전히 맞았지만 두 가지 (상호 연결 가능한 응용 프로그램과 상호 의존성)가 상호 배타적이라고 생각하지 않습니다. 거대 기업 프로젝트에는 대중에게 공개 할 의도는 없지만 분열 될 경우 논리적으로 더 명확한 몇 가지 상호 의존적 인 앱이있을 수 있습니다 (여러 천 라인의 models.py 파일을 피하기 위해). 모든 것을 재사용 할 수 있도록 모든 노력을 기울여야하지만 전체 프로젝트가 논리적 분할로 인해 유지 관리가 가능하다면 그만한 가치가 있다고 생각합니다. 종종 앱을 작성하고 그에 따라 디자인하는 동안 앱이 재사용에 도움이되는지 알 수 있습니다. – Jacinda

+0

널리 사용되는 Django 인증 사용자를 가리키는 외래 키가 다른 응용 프로그램에 대한 외래 키 (Authors 및 Books 대)를 원할 때 좋은 예가 될 수 있습니다. 예 : 'appointment_holder = models.ForeignKey (settings.AUTH_USER_MODEL)' – Jacinda