8

いくつかのモデルがあり、ユーザーに属するすべてのモデルのクエリセットを返したいのですが、複数のモデルから 1 つのクエリセットを返すことができるかどうか疑問に思っています。

4

2 に答える 2

8

各モデルからユーザーに属するすべてのオブジェクトの単一のクエリセットを返したいという意味だと思います。

クエリセットが必要ですか、それとも単にイテラブルが必要ですか? 私の知る限り、異種qは不可能です。ただし、必要なことを行うために、リスト、連鎖イテレーター (itertools)、またはジェネレーターを簡単に返すことができます。これは、ユーザーを参照するモデルが事前にわかっていることを前提としています。デフォルトの related_name を仮定すると、関連するクエリセット属性は、モデルの名前を介してユーザー インスタンスからアクセスできます。

qs = getattr(user, '%s_set' % model_name.lower());

もちろん、異種のリストを使用すると、そのようなすべてのモデルで定義されているフィールドまたはメソッドのみを使用できるか、タイプ固有のアクションを実行するために各オブジェクトのタイプを決定する必要があります。

于 2008-12-11T23:03:17.570 に答える
3

モデルには、related_nameキーワード引数が設定された関係フィールド(ForeigKeyおよびManyToManyField)が含まれている必要があります。こちらのドキュメントを確認してください。

于 2008-12-10T20:55:03.040 に答える