0

多くの Django モデルがある場合 - すべてに次の共通フィールドがあります: -

created_by = models.ForeignKey(User)
modified_by = models.ForeignKey(User)

すべてのモデルにクエリを実行して、特定のユーザーによって作成または変更されたオブジェクトを見つけたいのですが、これを達成するための適切な方法はありますか?

それとも、やることなどにフォールバックする必要がModelA.objects.filter(created_by=userone) ModelB.objects.filter(created_by=userone)ありますか?

実際には、これらのフィールドは、他のすべてのモデルが継承する抽象基本クラスにあることに注意してください。しかし、抽象基底クラスについて今言ったことを言わなかったことにしましょう。私がやりたいことを行う方法はまだありますか?

4

2 に答える 2

0

一度に 1 つのモデルを操作する必要があります。Djano ORM マネージャーQueysetは、データベースと対話するクラスを内部的に使用します。このクラスQuerySetインスタンスにはmodel、単一のテーブルと同義の属性があります。そのため、結合操作は可能ですが、1 つのテーブルとしか対話できません。ただし、シナリオでは、db を複数回呼び出す必要があります。

orm はデータベースの単なる抽象化です。SQL で直接これを行うことができるかどうかを考えてください。

SQLで:

select val from test union select val from test2 union......;

したがって、多くのモデルがあると言うので、多くのユニオンが存在するため、単一の db 呼び出しでこれを達成することはあまり意味がありません。

于 2013-04-25T05:24:41.437 に答える
0

akshar raaj が言っていることを拡張するには、モデルの配列を使用してコードを簡素化できます。

query_models = [ModelA, ModelB, ModelC, ModelD]
for query_model in query_models:
    results = query_model.objects.filter(created_by=userone)
    if len(results) > 0:
        print '%s has it!!!' % query_model.__name__
于 2013-04-25T05:32:22.950 に答える