1. ホーム
  2. python

[解決済み] 関連するすべての Django モデルオブジェクトを取得する

2023-02-05 15:13:44

質問

あるオブジェクトを指す ForeignKey を持つすべてのモデルオブジェクトのリストを取得するにはどうしたらよいでしょうか? (DELETE CASCADE前のDjango管理画面での削除確認ページのようなもの)。

私は、データベース内の重複するオブジェクトをマージする一般的な方法を考え出そうとしています。 基本的には、オブジェクト "B" への ForeignKeys ポイントを持つすべてのオブジェクトを、オブジェクト "A" へのポイントに更新したいので、その後、重要なものを失うことなく "B" を削除することが可能です。

助けてくれてありがとうございます。

どのように解決するのですか?

Django <= 1.7

これで、関連する全てのオブジェクトのプロパティ名を知ることができます。

links = [rel.get_accessor_name() for rel in a._meta.get_all_related_objects()]

そして、以下のような方法で関連するオブジェクトをすべて取得することができます。

for link in links:
    objects = getattr(a, link).all()
    for object in objects:
        # do something with related object instance

私はこれを理解するためにしばらく時間を費やしました。 を実装するために、これを理解するのに時間を費やしました。お役に立てれば幸いです。

Django 1.8+

使用方法 _meta.get_fields() : https://docs.djangoproject.com/en/1.10/ref/models/meta/#django.db.models.options.Options.get_fields (逆は _get_fields() ソースにもあります)