3

Django データベースで 2 人のユーザーをマージする必要があります。それで、それを行う簡単な方法(おそらく専用アプリ)があるのだろうか?

例えば:

モデルへの外部キーを持つuser_aモデル( 、など)があります。user_bUserBooksInterestsTeams

ユーザーをマージすることにより、オブジェクトを削除し、user_bこのオブジェクトを指すすべての外部キーを に設定したいと考えていますuser_a。そして、これが私の主な関心事です。削除するオブジェクトを参照するために変更する必要があるオブジェクトが、それらのモデルとそれらの外部キー フィールドのリストを手動で指定することなく、自動的に決定されることを望んでいます。

これはすでに実装されており、車輪を再発明していますか?

これは可能ですか?

Userそうでない場合は、その方法を教えてください:実行時に特定のモデル (私の場合)への外部キーを持つ Django モデルのリストを作成するにはどうすればよいですか?

お時間をいただきありがとうございます。

4

2 に答える 2

2

Django 1.8 以降では、Model _meta APIを使用してこれを確実に実現できます。

具体的には、 を使用できますOptions.get_fields。これにより、一般的な関係を処理することさえできます。

関連するフィールドごとに、マージ時に追加または置換するかどうかを検討する必要があります。この決定は、アプリケーション ロジックと対応するスキーマの選択によって異なります。

u = User.objects.get(pk=123)
related_fields = [
    f for f in u._meta.get_fields()
    if (f.one_to_many or f.one_to_one)
    and not f.concrete
]
for f in related_fields:
    # use field's attributes to perform an update
于 2016-11-09T01:01:20.627 に答える
2

このスニペットhttp://djangosnippets.org/snippets/2283/を見つけました。ただし、再帰的にするには、変更する必要があります。完了したら、コードを共有します。

于 2012-11-28T15:55:53.123 に答える