クエリセットエージェント
関連するManyTomanyフィールドとReverseForeignKeyに直接アクセスする場合は、関連するモデルのリストを返します。
ただし、QuerySet APIのサブセットを公開しているため、親モデルから直接フィルタリング、作成、関連モデルの選択などを行うことができます。
!!!(注)デフォルトでは、公開されているQuerySetは、親モデルに関連するモデルのみを返すようにフィルタリングされています。
1 | |
!!!note QuerysetProxyを介してQuerySet APIメソッドにアクセスする場合、通常のクエリのようにオブジェクトプロパティを使用する必要はないことに注意してください。
1 2 3 | |
!!!警告ManyTomanyから関連モデルをクエリすると、親モデルにロードされている関連モデルのリストがクリアされます。
1 2 3 4 5 6 7 8 9 | |
データベースからデータを読み込む
得る
get(**kwargs):->モデル
名前でフィルタリングされた関連モデルの1つだけを取得するには、get(**kwargs)メソッドを使用します。
1 2 3 4 5 6 7 8 9 | |
Tipクエリドキュメントで詳細を読む
取得または作成
get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]
条件を満たすローを取得しようとすると、NoMatch例外が発生した場合、指定されたkwargsと_defaaultを使用して新しいローが作成されます。
!!!tipクエリドキュメントget_or_createで詳細を読む
全部
all(**kwargs) -> List[Optional["Model"]]
関連するモデルのリストを取得するには、all()メソッドを使用します。
通常のクエリと同様に、クエリセットをフィルタリングしたり、関連するものを選択したり、フィールドを除外したりできます。
1 2 3 4 5 6 7 | |
Tipクエリドキュメントで詳細を読む
反復
iterate(**kwargs) -> AsyncGenerator["Model"]
関連するモデルを反復するには、iterate()メソッドを使用します。
通常のクエリと同様に、クエリセットをフィルタリングしたり、関連するものを選択したり、フィールドを除外したりできます。
1 2 3 | |
Tipクエリドキュメントの反復処理で詳細を読む
データベースへのデータの挿入/更新
創造する
作成(**kwargs):->モデル
親モデルから直接関連モデルを作成します。
リンクされたテーブルとデータベースのリレーショナルIDが自動的に入力されます。
1 2 3 4 | |
ヒントクエリドキュメントの作成で詳細を読む
多対多の関係の場合、明示的に提供されているパススルーモデルで他のフィールドを宣言した場合、パススルーモデルの作成に使用されるパラメーターを渡す追加機能があります。
このようなサンプルが与えられた場合:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
create()呼び出しのフィールドにモデルを入力するには、次の方法があります。
1 2 3 4 5 6 7 | |
取得または作成
get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]
条件を満たすローを取得しようとすると、NoMatch例外が発生すると、指定されたkwargsを使用して新しいローが作成されます。
!!!tipクエリドキュメントget_or_createで詳細を読む
更新または作成
update_or_create(**kwargs) -> Model
モデルを更新するか、データベースに一致するものがない場合に新しいモデルを作成します。
!!!tipクエリドキュメントupdate_or_createで詳細を読む
更新する
update(**kwargs, each:bool = False) -> int
指定されたキーワードパラメーターを使用して関連するモデルを更新し、更新された行数を返します。
Tipクエリドキュメントの更新で詳細を読む
多対多リレーションシップの更新では、フィールド名とフィールドディクショナリを含むパラメーターも使用できることに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
上記の例では、次の呼び出しでpostcategoryのプロパティを更新できます。
1 2 3 | |
フィルタリングとソート
フィルタリング
filter(*args, **kwargs) -> QuerySet
クロスFKリレーションシップのフィルターを使用して、任意のモデルプロパティ/フィールドでインスタンスをフィルタリングおよび取得できます。
Tipクエリドキュメントフィルターで詳細を読む
除外する
exclude(*args, **kwargs) -> QuerySet
フィルターとまったく同じように動作し、すべての修飾子(接尾辞)は同じですが、not条件を返します。
Tipクエリドキュメントで詳細を読む除外
注文の根拠
order_by(columns:Union[List, str]) -> QuerySet
order_by()を使用すると、選択したフィールドに基づいてデータベースの結果を並べ替えることができます。
!!!tipクエリドキュメントorder_byで詳細を読む
接続とサブクエリ
関連を選択
select_related(related: Union[List, str]) -> QuerySet
同じクエリ中に関連するモデルを事前にフェッチできます。
select_atedを使用すると、常にデータベースに対して1つのクエリのみが実行されます。つまり、(場合によっては複雑な)接続が生成され、後でネストされたモデルがPythonで処理されます。
!!!tipクエリドキュメントでselect_atedの詳細を読む
プリフェッチ関連
prefetch_related(related: Union[List, str]) -> QuerySet
クエリ中に関連するモデルを事前にフェッチできますが、select_atedとは対照的に、後続の各モデルは個別のデータベースクエリでフェッチされます。
prefetch_atedを使用すると、各モデルはデータベースに対してクエリを実行します。つまり、複数のクエリを1つずつ実行します。
!!!tipクエリドキュメントprefetch_atedで詳細を読む
ページングと行数
ページング
paginate(page: int, page_size: int = 20) -> QuerySet
ページ番号とサイズに基づくオフセットと制限の方法が組み合わされています。
Tipクエリドキュメントのページングで詳細を読む
制限する
limit(limit_count: int) -> QuerySet
結果を必要な親モデルの数に制限できます。
Tipクエリドキュメントの制限で詳細を読む
相殺する
offset(offset: int) -> QuerySet
必要なマスターモデルの数で結果を相殺することができます。
Tipクエリドキュメントオフセットで詳細を読む
列のサブセットを選択
ドメイン
fields(columns: Union[List, str, set, dict]) -> QuerySet
field()を使用すると、モデル列のサブセットを選択してデータの負荷を制限できます。
Tipクエリドキュメントフィールドで詳細を読む
除外フィールド
exclude_fields(columns: Union[List, str, set, dict]) -> QuerySet
除_field()を使用すると、除外するモデル列のサブセットを選択して、データの読み込みを制限できます。
!!!tip詳細については、クエリドキュメントを参照してください。
集計関数
数える
count(distinct: bool = True) -> int
指定された条件に一致するローの数を返します(つまり、フィルターと除外を適用します)
Tipドキュメントカウントのクエリで詳細を読む
存在する
存在()->ブール値
指定された条件を満たすローがあるかどうかを確認するブール値を返します(フィルターと除外とともに適用されます)
Tipもっと読むクエリドキュメントが存在します