2

からモデルチェンジしました

class HardwareModel(models.Model):
    name = models.CharField(max_length=128,unique=True)
    series =models.CharField(max_length=128)
    def __unicode__(self):
        return "%s" % (self.name)

class HardwareModel(models.Model):
    name = models.CharField(max_length=128,unique=True)
    series = models.ForeignKey(HardwareModelSeries, blank=True)
    def __unicode__(self):
        return "%s" % (self.name)

そして、私は移住のために南を使用しました。( --auto を使用すると、移行スクリプトは南によって作成されます)

    # Renaming column for 'HardwareModel.series' to match new field type.
    db.rename_column('iamictinfra_hardwaremodel', 'series', 'series_id')
    # Changing field 'HardwareModel.series'
    db.alter_column('iamictinfra_hardwaremodel', 'series_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['iamictinfra.HardwareModelSeries']))
    # Adding index on 'HardwareModel', fields ['series']
    db.create_index('iamictinfra_hardwaremodel', ['series_id'])

まったく新しい sqllite データベースを作成している間 (テスト中)、次のエラーが発生します。

south DEBUG execute "CREATE INDEX "iamictinfra_hardwaremodel_b18a98d" ON "iamictinfra_hardwaremodel" ("series_id");" with params "[]"
FATAL ERROR - The following SQL query failed: CREATE INDEX "iamictinfra_hardwaremodel_b18a98d" ON "iamictinfra_hardwaremodel" ("series_id");
The error was: index iamictinfra_hardwaremodel_b18a98d already exists

create index コマンドを削除できるようになりましたが、運用サーバー (mySql) で動作するかどうかはわかりません。

別のオプションは、おそらくスクリプトを変更して列を削除し、それを変更する代わりに作成することです...しかし、私はさらに多くの移行を行っています....古い移行を混乱させるのは少し難しいと思います... .. トライキャッチでキャッチしてみた...

また、このスクリプトは古い南部バージョンを使用して作成された可能性もあります...そして、新しいバージョンでは、列を変更するときにインデックスの名前も変更されます...そして古いバージョンではそうではありませんでした...

私は南0.7.6(現在の最新)を使用しています。

助言がありますか?

4

2 に答える 2

0

@Mariodev 申し訳ありませんが、これに対する解決策は見つかりませんでした。

南部の開発コミュニティでは、sqlite は django の実際のデータベース オプションとは見なされていないため、近い将来に解決策があるようには見えません。ここで述べたのはもう少し複雑かもしれませんが、実際には開発サーバー(runserver)で実行することにも関係があると思います。

私の場合、sqlite データベースは単なる開発およびテスト データベースでした (本番環境は MySQL で実行されました)。

問題はmySqlでは発生しません

したがって、私の「解決策」は、sqliteデータベースを削除し(幸い、新しい開発データベースを作成するためのフィクスチャを使用しています)、新しいsyncdbを実行して移行することでした。

確実にフィクスチャを使用するか、dump コマンドを使用してデータベースをバックアップしてください。そうすれば、クリーンなスタートを切ることができます...

于 2013-07-23T09:44:47.050 に答える