0

Djangoプロジェクトのいくつかのインスタンスのデータを新しいスキーマに移行しています。

古いスキーマには次のものがありました。

class Group(models.Model)
class User(models.Model)

そして、新しいスキーマには次のものがあります。

class AccessEntity(models.Model)
class Group(AccessEntity)
class User(AccessEntity)

これらのグループとユーザーのデータ移行を行うためにSouthを使用しようとしています。http://south.aeracode.org/docs/tutorial/part3.html

ユーザーの移行方法を指定するために転送ルールを使用する必要があることを確認しましたが、直面した問題がいくつかあります。

主な問題は、AccessEntityクラスを拡張する新しいUserオブジェクトを作成する場合に、ユーザー/グループのIDを同じに保つ方法です。

ユーザーとグループは、所有または割り当てられているオブジェクトによって参照されます。IDを変更すると、その情報は失われます。AccessEntityから拡張する必要がある場合でも、オブジェクトに同じIDを保持する方法はありますか?

4

1 に答える 1

2

私があなたの質問を正しく理解しているかどうかはわかりませんが、マルチテーブルモデルの継承が機能する方法は、親モデルと子モデルに暗黙の1対1のフィールドがあるということです。したがって、AccessEntityにそのようなフィールドがある場合、ユーザーとグループの両方がAccessEntityのIDフィールドを使用します。

ID転送(データ)移行を作成するときに割り当てることができるフィールドを持つようにAccessEntityを作成する場合。そうすれば、AccessEntityが正しいIDを取得することを確認できます。

より長いマルチテーブル継承チュートリアルを作成していて、同様のことをしようとしているように見える場合。

さらに、この質問への回答も役立つ可能性があります(元の回答の一部は、新しいバージョンのdjango / southでは機能しないことに注意してください。変更については、私のチュートリアル/下部の回答を参照してください)。

あなたの場合に問題になるかもしれないのは、ユーザーとグループの両方にすでにデータがあり、idフィールドが自動生成さIDsれている場合、たとえば、ユーザーとグループの両方がである可能性が高いということID==1です。これらに基づいてクエリを実行する場合、これは問題になる可能性があります。IDsもちろん、そのID場合の主キーにはなりませんAccessEntity

于 2011-02-17T13:31:41.733 に答える