2012-03-20 4 views
0

저는 텍스트 기반 브라우저 게임을 만들고 장고 모델 구조에 대한 조언이 필요합니다. 모든 예제는 같은 프로젝트에서 나온 것이므로 모든 질문을 위에서 아래로 읽었다 고 가정 할 때 동일한 정보를 반복하지 않겠습니다.내 프로젝트의 장고 모델 구조


첫 번째 질문

나는 모든 선수가 참가 노조 모두 플레이어에 대한 보상을 나타냅니다 medals 응용 프로그램에 대한 정보를 보유하고 사용자 프로파일 (Player 모델)을 포함하는 authalliance 응용 프로그램이 동맹.

모두 사용자와 제휴 메달 할당하므로 옵션 중 하나가 Medal에 연결 PlayerAlliance 모델에 M2M 필드를 만드는 것입니다 수 있습니다.

또 다른 옵션으로 내 다른 프로젝트에서 medals 앱을 사용할 수 있습니다. 이 접근법은 Player 또는 Alliance에 연결되는 Medal 모델의 일반 관계 사용을 포함합니다.

어떤 솔루션이 장고와 유사합니까? 아니면 할 수 있습니까?


두 번째 질문

플레이어가 수행 할 작업이있을 것입니다. 작업의 시나리오는 매우 다양하므로 각 작업에 대한 고유 한 작업 진행 코드를 작성하기 위해 어떤 종류의 접근 방식이 필요합니다.

작업은 보상에 대한 정보가 포함 된 데이터베이스에 보관됩니다 (거의 동일합니다). 각 작업에 대해 고유 한 코드는 어디에 작성해야합니까? 어쩌면 나중에 필드를 추가하고 나중에 평가해야할까요? 그러면 모든 정보가 DB에 보관됩니다.

또한 작업에는 일부 추적이 필요합니다. 예를 들어, 수동 섹션으로 이동하는 간단한 작업을 상상해보십시오 (플레이어가 어디에 있는지 알 수 있도록). 그런 다음 플레이어가 매뉴얼 페이지를 방문했는지 여부를 어딘가에 등록해야합니다. 나는 다른 모델 TaskTrackers 작업 애플 리케이션을 만드는 방법에 대해 생각합니다. 그런 다음 다른 질문이 생깁니다. 만약 내가 Player에서 TaskTrackers 또는 그 반대로 OneToOne 필드를 추가해야합니까? 요약하면


은 주요 문제는 내가 사용자 프로파일 모델에 OneToOneFields/M2M 필드를 추가하거나 사용자 모델을 대상 모델에서 OneToOneFields/Foreigneys를 추가할지 여부입니까? 후자는 내 앱을 더 재사용 할 수있게 만들지 만 첫 번째 방법은 더 논리적 일 수 있습니다.

답변을 기다리는 중입니다.

+0

사실, 장고 인증을 사용하려는 경우 "인증"앱을 호출하는 것은 좋지 않습니다. 또한 'auth'라고 표기되며 동일한 이름을 가진 두 개의 앱이 좋지 않습니다 (예 :'manage.py test auth'). – DrTyrsa

답변

0

첫 번째 질문은 M2M에서 메달까지 또는 일반적인 외래 키를 사용할 수 있다는 것입니다. M2M과 함께 몇 개의 조인 테이블로 끝납니다. 일반 외래 키를 사용하면 조인 테이블이 없어도 컨텐트 유형에 대한 추가 쿼리가 생성됩니다. 따라서 두 가지 방법을 모두 설정하여 성능에 어떤 영향을 미칠지 알아야합니다.

두 번째 질문에서 하나 이상의 "단계"모델과 함께 "작업"모델을 사용할 수 있습니다. 인라인 formset으로 설정하십시오.그런 다음 플레이어 ID, 작업 ID 및 단계 ID가 포함 된 "CompletedPlayerTasks"또는 이와 비슷한 표가 필요합니다. 해당 테이블에 단계 ID가 있으면 태스크가 완료된 것입니다.

Django에서별로 어려운 일이 아닌 각 작업의 단계에 대한 사용자 지정 필드와 양식을 만들 수 있어야하는 것 같습니다. 이 작업을 수행하려면 some off the shelf solutions이 있지만 직접 작성해야 할 수 있습니다.

마지막으로 Django의 contrib.auth 앱에 네임 스페이스 문제가 발생할 수있는 사용자 프로필 "auth"를 보유하고있는 앱의 이름을 지정하지 않겠습니다. 나는 그것을 "프로필"이라고 이름을 짓 겠지. 그래서 그 앱이 무엇을 포함하고 있는지 분명히 알 수있다.

희망은 당신에게 몇 가지 아이디어를 제공합니다.