2013-03-27 1 views
1

South를 사용하여 sqlite3 데이터 마이그레이션을 수행하고 있습니다. 내 오랜 스키마는 사용자 프로필에 대해 다음 모델이 있습니다OneToOne 키를 사용하여 South 데이터 마이그레이션

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    weekOne = models.OneToOneField(WeekOne) 
    weekTwo = models.OneToOneField(WeekTwo) 
    weekThree = models.OneToOneField(WeekThree) 

을하지만 감각 즉, weekFour, weekFive, weekSix 등 매주 자체가 일반적인 주에서 상속하는 모델 새로운 주의 번호를 추가 한 모델. 그래서 주 모델의 기본 프로토 타입은 다음과 같습니다

class WeekOne(Week): 
    name = u'Week One' 
    exercises = ['squats', 'lunges', 'stairDaysCount', 'skipStairs'] 
    # Required benchmarks for given exercises 
    squatBenchmark = 1000 
    lungeBenchmark = 250 
    stairDaysCountBenchmark = 3 

    totalGoals = 4 

내 질문에, 나는 내 datamigration 코드에 두어야 코드의 어떤 종류가 추가 주와 함께 오래 UserProfile의를 채울 수 있도록합니다. 나는 다음과 같은 것을 염두에 뒀다 :

def forwards(self, orm): 
    for user in orm.UserProfile.objects.all(): 
     user.weekFour = orm.WeekFour() 
     user.weekFive = orm.weekFive() 
     # etc. 

그러나 그것은 효과가없는 것처럼 보인다.

Migration 'my_app:0002_newWeeks' is marked for no-dry-run 

그리고 나중에는 :

DatabaseError: no such column: my_app_userprofile.weekFour_id 

답변

0

그냥

python manage.py schemamigration myapp --auto 

그리고 터미널에

python manage.py migrate 
+0

를이 실행 내가 스키마 마이그레이션을 실행하려고 할 때이 오류가 내 앱이 이미 새 모델이없는 모델을 만든 경우에는 작동하지 않습니다. 열쇠. 즉, 나는 주로서 1-3 주를 가진 사용자를 키로 만들었고, 그 키들과 그 사용자들과 함께 많은 것을하고, 4-9 주를 더했습니다. 모든 새로운 사용자는 모든 주를 가지지 만 오래된 사용자는 4-9 주가 지나면 null이되며 키는 NOT NULL 키이므로 오류가 발생합니다. – user1427661

+0

오류를 발생시키지 않도록 기본값을 정의 할 수 있습니다. – catherine