2014-01-23 4 views
4

Centos VPS에 장고 프로젝트가 있습니다.Django가 모델에 대한 db 테이블을 만들지 않습니다 (syncdb도 South도 아닙니다)

일부 모델을 생성하고 디버깅하여 오류가 없는지 확인했습니다. 내 MyApp를에서 "모델"폴더에있는 예를 들어,이 디렉토리에서 init 파일에 각 모델을 추가 한 : 카테고리 수입 카테고리에서

나는 INSTALLED_APPS를 settings.py를 앱에 추가 실행 :

Python manage.py syncdb 

내 작업과는 별개로 모든 테이블이 추가 된 것처럼 보였습니다.

Python manage.py schemamigration myapp --initial 

그것은 제대로 파일을 생성하지만 아무것도 거기에 없었다 (표 내 모델 없음) :

는 그때 한국을 설치하고 그에게 INSTALLED_APPS을 추가하고, syncdb 다시 시도 달렸다.

"모델"폴더 (usertype.py)의 예제 파일

from django.db import models 

class UserType(models.Model): 
    usertype_id = models.PositiveIntegerField(primary_key=True) 
    description = models.CharField(max_length=100) 
    is_admin = models.BooleanField() 
    is_moderator = models.BooleanField() 

class Meta: 
    app_label = 'myapp' 

여기에 잘못 갈 수 있는지 어떤 아이디어는 내가 나의 모델을 감지 아무것도 얻을 수없는 이유는 무엇입니까?

+0

원본 게시물을 편집하여 의견을 추가하십시오. 이럴 경우 읽을 수 없습니다. – yuvi

+0

이제 원본 게시물에 추가 했으므로 더 많은 정보가 필요합니까? – user3227889

+0

다른 코멘트보기 – yuvi

답변

8

당신은 남쪽과의 작업 과정을 오해하고 있습니다. South은 다른 응용 프로그램이 아니라 관리 도구입니다. 귀하의 응용 프로그램은 처음부터 사우스 응용 프로그램이어야하거나 하나의 응용 프로그램으로 변환되어야합니다. 상기되고, 프로세스는 매우 같다 :

  1. INSTALLED_APPS에 남쪽을 추가
  2. 남쪽 초기화 명령을 실행 *

  3. 가 INSTALLED_APPS에 응용 프로그램을 추가 처음으로
  4. 실행 syncdb :

    python manage.py schemamigration myapp --initial 
    
  5. 마이그레이션 :

    python manage.py migrate 
    

당신은 프로젝트 변환 할 경우 : 남쪽

  • 실행 추가 한 후

    1. 실행 syncdb를 :

      manage.py convert_to_south myapp

    을 그리고에 지금부터 남쪽으로 사용 마이그레이션을 관리하십시오.

    * p.s. - 자신의 앱 앞에 남쪽을 두는 것을 명심한다면 남과 자기 자신의 앱을 동시에 추가 할 수 있습니다.그것은 모든 응용 프로그램에 syncdb를 실행하지만 남쪽 설치 한 후에는 남쪽이 그

    편집

    I을 처리하기 위해 명령을 사용하는 당신에게 대신 나머지를 설치하지 않습니다 - 장고 순서대로 INSTALLED_APPS을 읽어 때문이다 너를 속 였어. 당신이 남쪽의 것에 너무 많은 강조를 두었 기 때문에 문제는 당신이 정상적인 파일 대신 디렉토리 모듈로 모델을 사용하려고 시도한다는 것을 깨닫지 못했습니다. 이것은 recognized problem in django, 그리고 해결 방법은 처음에 비록 당신이 정확히 실제로 :이처럼 보이도록 bar.py 필요

    project/ 
         myapp/ 
          models/ 
            __init__.py 
            bar.py 
    

    :

    이 당신의 구조라고

    from django.db import models 
    
    class Foo(models.Model): 
        # fields... 
    
        class Meta: 
         app_label = 'myapp' #you need this! 
    

    __init__.py은 다음과 같이 표시해야합니다.

    from bar import Foo 
    

    이렇게 보이는지 확인하십시오.

    app_label has been fixed에 분명히 더 큰 문제 때문에 티켓, wontfix 변경되었습니다 18/08/2014

    UPDATE. 후자!

  • +0

    DB에 모델이없는 새로운 앱이기 때문에 --initial을 사용하고 있습니다. "manage.py convert_to_south myapp"를 시도했는데 "이 응용 프로그램은 모델이 없습니다.이 명령은 이미 syncdb'd 모델이있는 응용 프로그램 용입니다. 일부 모델을 만든 다음 ./manage.py를 사용하십시오. schemamigration myapp - 처음 대신. " 언급했듯이, 나는 initialit을 실행할 수 있고 생성 된 파일에 아무것도 없다는 사실 외에도 예상대로 실행된다. 모델을 감지하지 못한다. 이것들은 모두 DB에없는 새로운 모델입니다. – user3227889

    +0

    1. 게시글에서 설명하는 방식은 내가 설명한 방식이 아닙니다. 2. models.py를 공유 할 수 있습니까? 또한 귀하가 생각하는 추가 정보는 적합합니다. 아직 전체 문제를 보지 못했다고 생각합니다. – yuvi

    +0

    "models"폴더의'__init __. py'에서 추천을 제거했습니다. 고마워요. 모델이 발견되지 않아서 내 문제가 바뀌지는 않았지만. – user3227889

    8

    다음 명령을 실행

    python manage.py makemigrations yourappname 
    
    python manage.py migrate 
    

    주 나를 위해 장고 1.7 버전에서 작동.