2013-05-22 3 views
0

우선 : 나에게 묻지 마세요. "왜 이걸 필요할까요?".syncdb에 대한 django 선택 앱

이제 질문 자체 : 여러 응용 프로그램이 INSTALLED_APPS에 설치되어 있습니다. 데이터베이스가 비어있어 일부 앱만 동기화하고 싶습니다. 이 작업을 수행하는 가장 간단한 방법은 무엇입니까?

나는 syncdb를 기반으로 내 사용자 지정 관리 명령을 쓸 수 있음을 알고 있습니다. 그러나 syncdb는 코드의 큰 덩어리를 복사/붙여 넣으면서 한 줄만 변경해야하는 그런 방식으로 설계되었습니다. 이것이 다른 가능성을 탐구하려는 이유입니다.

답변

0

당신은 django-extensions 설치를 가능하게하고 같은 유용한 명령입니다 사용할 수 있습니다 : 그것은 SQL의 목록을 인쇄합니다

./manage.py sqldiff APP_NAME 

당신이 이름으로 응용 프로그램을 syncdb을 실행할 수있는 명령. 여기

장고 - 확장 문서 : 당신은 모델의 Meta 클래스 managed = False을 할 수 https://django-extensions.readthedocs.org/en/latest/

+0

이 접근법은 관리의 악몽입니다. ​​ – karthikr

+0

@karthikr - agree. – mnowotka

+0

@karthikr 네 말이 맞아.하지만 여전히 해결책이야 – MostafaR

1

. 이 속성을 설정하면 syncdb이 앱의 표를 관리하지 않습니다. 당신은 그것에 대해 here 읽을 수 있습니다.

또 다른 방법은 사용자 정의 라우터이 작동하는 것 같다

class MyAppRouter(object): 
    """A router to control all database operations on models in 
    the myapp application""" 

    def db_for_read(self, model, **hints): 
     pass 

    def db_for_write(self, model, **hints): 
     pass 

    def allow_relation(self, obj1, obj2, **hints): 
     pass 

    def allow_syncdb(self, db, model): 
     if model._meta.app_label in ['myapp1', 'myapp2'] 
      return False 
+0

너무 많은 번거 로움 - 나는 모든 애플 리케이션에서 모든 모델을 통해 반복해야만했다, 국기의 이전 상태를 기억하고, 나중에 복원하십시오. 사용자 정의 명령을 작성하는 것이 더 쉽습니다 ... – mnowotka

+0

오. 그래서 당신은 그것을 영구적으로 해제하고 싶지 않습니까? – karthikr

+0

아니요, 하나의 데이터베이스에서 다른 데이터베이스로 모델 데이터를 내보내는 사용자 정의 명령에서 syncdb를 호출합니다. 대상 DB에 syncdb에 의해 테이블을 만들려는 테이블이 없지만 내보낼 응용 프로그램에 대해서만 테이블을 만들어야합니다. – mnowotka

0

작성하는 것입니다 - 응용 프로그램에 의해 python manage.py syncdb --database=NEW_APP_DB 시작 마이그레이션을위한

0

app_label 인수가 :

<app_label>에게 : 지정된 앱의 이전이 실행 중입니다. 최근 완료일은 입니다. 종속성으로 인해 과 같이 다른 앱의 이전을 실행해야 할 수도 있습니다.

./manage.py migrate myapp 

Django's docs를 참조하십시오.