7

django-southを使用して、先行するすべての移行を適用せずに、最後の最新の構成にのみテーブルをセットアップすることは可能ですか?

サードパーティのツール(django-activity-stream)の使用に関心がありますが、不明な理由(特定のフィールドに関するMySQLの問題の可能性があります)、特にエラーを発生させる移行003のために、すべての移行を実行するのに問題があります

_mysql_exceptions.OperationalError:(1170、"キーの長さのないキー指定で使用されるBLOB/TEXT列'object_id'") "移行を回避し、現在のスキーマに直接移動することで、これを回避できると強く思います。

逆方向に移行する機能は必要ありません。現在のスキーマに移動する必要があるだけで、これに対処するためにパッケージをハックしたくありません。コマンドを確立できないようです、またはこれが可能かどうか?

構成:

南0.7.6、django 1.3.x、mysql 5.5.x、django-activity-stream 0.4.4

4

2 に答える 2

4

このエラーは、actstreamその汎用外部キーを処理する方法が原因で発生します。MySqlでは長さが指定されていないテキストフィールドが表示されるため、問題が発生します。

このエラーは、移行0003をno-opにすることで修正できます。

移行0003_text_field_ids0004_char_field_idsactstreamで次のことを変更します。

0003_text_field_ids.py:

  1. のすべてを削除し def forwards(self, orm)、 両方def backwards(self, orm)を書き込むだけです。pass
  2. に変更TextFieldPositiveIntegerFieldます。

0004_char_field_ids.py:

  1. で、すべてdef backwards(self, orm)に変更TextFieldします。PositiveIntegerFielddb.altercolumns()

これにより、移行0003は順方向と逆方向のパスを使用するnoopになり、モデルの定義PositiveIntegerFieldsで汎用外部キーが使用されるため、移行0001が残したのと同じ状態に保たれます。PositiveIntegerFieldsこれを行うと、移行0004はからにピックアップできvarCharsます。次に、修正により移行0004が変更されるため、逆方向の移行はではPositiveIntegerFieldsなくに変更されTextFieldsます。

これで問題が解決するはずです。

于 2012-11-30T05:40:42.330 に答える
2

問題が移行によって引き起こされているsyncdbとは思いませんが、同じ結果が得られます。

MySQLはBLOBまたはTEXT列の最初のN文字のみにインデックスを付けることができるため、エラーが発生します。したがって、主キーまたはインデックスとして作成しようとしているTEXTまたはBLOBのフィールド/列タイプが必要です。

長さの値がない完全なBLOBまたはTEXTの場合、MySQLは可変で動的なサイズであるため、列の一意性を保証できません。したがって、インデックスとしてBLOBまたはTEXTタイプを使用する場合、MySQLがキーの長さを決定できるように、Nの値を指定する必要があります。

この問題を修正してから、移行を適用してみてください。うまく機能するはずです。はい、移行を適用して古いものをスキップすることはできますが、南が使用されることになっている方法ではないため、これを行わないことをお勧めします。

私が物事を少し明確にしたことを願っています。

于 2012-09-24T11:21:35.463 に答える