2011-10-24 12 views
2

私はdjangoを使用してアプリケーションを構築しており、データベーススキーマの移行にはdjango-southを使用しています。私はdjango-mpttを使ってコメントシステムを構築していますが、私は0.5-pre(現在のgitマスターブランチ)をインストールしました。django-south - 依存関係をダウングレードする適切な方法は?

私が使用しているバージョンにはTreeForeignKeyというdjangoフィールドがありますが、0.5には0.4に存在するバグがあるかどうかをテストしようとしていますので、私のバージョンのdjango-mpttを削除し、チーズソープから解放される。 TreeForeignKeyではなくForeignKeyを使用するようにコードを変更しました。それは移行を行うには時間が来ると、それは明らかにこのメッセージを破る

ValueError: Cannot import the required field 'mptt.fields.TreeForeignKey' 

すべての私の移行ファイルには、ジャンゴ・MPTT 0.4に存在しませんmptt.fields.TreeForeignKeyを参照します。ジャンゴ・MPTT 0.5で

マイCommentモデル:

from mptt.models import MPTTModel 
from mptt.fields import TreeForeignKey 

class Comment(MPTTModel): 
    # ... 
    parent = TreeForeignKey('self', related_name='children', blank=True, null=True) 

私はジャンゴ・MPTTする修正する私が思い付いた2つのむしろハックのアプローチがあります0.4

import django.db.models 
from mptt.models import MPTTModel 

class Comment(MPTTModel): 
    # ... cruft 
    # TreeForeignKey does not exist in mptt 0.5! 
    parent = models.ForeignKey('self', related_name='children', blank=True, null=True) 

ダウングレードした後、同じモデルこれは移行を許可します:

  1. 私のdjango-mptにTreeForeignKeyクラスを追加してくださいインストールします。
  2. 移行ファイルを変更してmptt.fields.TreeForeignKeyへの参照を削除してください。

私は最初のアプローチをとりましたが、うまく機能しましたが、ハックのような感じです(しかし、2番目のオプションほどではありません)。

私のモデルでいくつかのフィールドが変更された依存関係のダウングレードを行ったことは、ハッピーではありませんか?

答えて

2

これは本当に南とは関係ありません。 django-mpttのfieldsモジュールが0.5より前に存在しませんでした。したがって、0.4にダウングレードすると、正しくImportErrorが取得されます。

私は0.4を実行していないため、開発者が0.4のドキュメントを保守していないいくつかの狂った理由から、適切なインポートが何であるかは分かりません。しかし、2番目のアプローチが最も適切と思われます。マイグレーションでTreeForeignKeyを実際に使用する必要はありません。これは単に標準のForeignKeyのラッパーです。

+1

ええ、南のものは少し直交していましたが、モデルが変更され、移行が不足していたために壊れてしまいました。私の小さな実験はバージョンの変更に起因するものではありませんでしたが、私はdjango-mptt github-masterバージョンに戻しました。ありがとう! – birryree

+0

全く同じ問題があり、2番目の方法を使用して解決しました。mptt.fields.TreeForeignKeyのすべての文字列をdjango.db.models.fields.related.ForeignKeyに置き換えました。 – silentser

関連する問題