具体的なモデルに変換している抽象モデルがあります。私は正常にスキーマを変更するために南を使用していますが、私はデータマイグレーションを使用することができません。南でデータを移行すると新しいモデルが動作しない
私の初期状態は次のとおりです。
class UserProfile(models.Model):
user = models.OneToOneField(User, primary_key=True, \
related_name='profile')
class Meta:
abstract=True
class SpecificProfile(UserProfile):
url = models.URLField()
私の新しい状態は次のとおりです。
class UserProfile(models.Model):
user = models.OneToOneField(User, primary_key=True, \
related_name='profile')
class SpecificProfile(UserProfile):
user_profile = models.OneToOneField(UserProfile, parent_link=True)
url = models.URLField()
マイスキーマの移行は、次のとおりです。
class Migration(SchemaMigration):
def forwards(self, orm):
# Renaming field 'SpecProfile.user_profile'
db.rename_column('specificprofile', 'user_id', 'user_profile_id')
# Adding model 'UserProfile'
db.create_table('userprofile', (
('user', self.gf('django.db.models.fields.related.OneToOneField')(related_name='profile', unique=True, primary_key=True, to=orm['auth.User'])),
))
db.send_create_signal('myapp', ['UserProfile'])
私がするために、南で生成されたファイルを編集しましたSpecificProfileの1つのフィールドの名前を変更する
今、データ移行プロセスでは、SpecificProfile
ごとに1つのUserProfileエントリを作成し、UserProfile.user_id
をSpecificProfile.user_profile_id
に割り当てたいとします。
だから、私のデータ移行は前方です:
class Migration(DataMigration):
def forwards(self, orm):
for spec in orm.SpecificProfile.objects.all():
user_profile = orm.UserProfile()
user_profile.user_id = spec.user_profile_id
user_profile.save()
スクリプトがエラーなしで実行されますがのUserProfileテーブル内の任意の新しいエントリを作成しません。 orm.UserProfile()
の代わりにUserProfile()
を使用しますか?
アイデア?
SpecificProfile.user_profile_idは、スキーママイグレーション後に存在するはずです。具体的には、SpecificProfile.user_idの名前をSpecificProfile.user_profile_idに変更します。上記の私のSchemamigrationコードを確認してください。この名前の変更は正常に動作しています。 私はあなたのコードをテストしましたが、そのような場合にはうまくいきませんでした。 – duduklein
私の問題は、orm.SpecificProfile.objects.all()が空のリストを返すことです – duduklein