Query Set Agent pour
Lorsque vous accédez directement au champ ManyToMany associé, ainsi qu'à la clé ReverseForeignKey, une liste des modèles associés est renvoyée.
Mais en même temps, il expose un sous-ensemble de l'API QuerySet, de sorte que vous pouvez filtrer, créer, sélectionner des modèles pertinents, etc. directement à partir du modèle parent.
!!!Remarque Par défaut, les QuerySet exposés ont été filtrés pour renvoyer uniquement les modèles associés au modèle parent.
1 | |
!!!Notez que lorsque vous accédez à la méthode QuerySet API via QuerysetProxy, vous n'avez pas besoin d'utiliser les propriétés de l'objet comme vous le feriez pour une requête normale.
1 2 3 | |
!!!Avertissement La requête d'un modèle associé à partir de ManyToMany efface la liste des modèles associés chargés sur le modèle parent:
1 2 3 4 5 6 7 8 9 | |
Lire les données de la base de données
obtenir
get(**kwargs): -> Modèle
Pour obtenir uniquement l'un des modèles pertinents filtrés par nom, vous pouvez utiliser get(**kwargs) méthode.
1 2 3 4 5 6 7 8 9 | |
Tip
Obtenir ou créer
get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]
Essayez d'obtenir une ligne qui répond aux critères, et si une exception NoMatch est levée, une nouvelle ligne est créée avec les kwargs et_defaults donnés.
!!!tip En savoir plus dans le document de requête get_or_create
Tous les
all(**kwargs) -> List[Optional["Model"]]
Pour obtenir une liste des modèles pertinents, utilisez la méthode all().
Notez que vous pouvez filtrer les ensembles de requêtes, sélectionner des relations, exclure des champs, etc. comme une requête normale.
1 2 3 4 5 6 7 | |
Tip
itération
iterate(**kwargs) -> AsyncGenerator["Model"]
Pour itérer sur un modèle pertinent, utilisez la méthode iterate().
Notez que vous pouvez filtrer les ensembles de requêtes, sélectionner des relations, exclure des champs, etc. comme une requête normale.
1 2 3 | |
Tip
Insérer/mettre à jour des données dans une base de données
Créer des
Création (**kwargs): -> Modèle
Créer un modèle associé directement à partir du modèle parent.
Les tables liées, ainsi que les ID de relation dans la base de données, sont automatiquement remplis.
1 2 3 4 | |
Tip
Pour les relations plusieurs-à-plusieurs, si vous avez déclaré des champs supplémentaires sur le modèle de passage explicitement fourni, il existe une fonctionnalité supplémentaire pour passer des paramètres qui sera utilisée pour créer le modèle de passage.
Étant donné un tel échantillon:
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 | |
Vous pouvez remplir un champ via le modèle dans un appel create() de la manière suivante:
1 2 3 4 5 6 7 | |
Obtenir ou créer
get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]
Essayez d'obtenir une ligne qui répond aux critères, et si une exception NoMatch est levée, une nouvelle ligne est créée avec les kwargs donnés.
!!!tip En savoir plus dans le document de requête get_or_create
Mettre à jour ou créer
update_or_create(**kwargs) -> Model
Mettez à jour le modèle ou créez un nouveau modèle s'il n'y a pas de correspondance dans la base de données.
!!!tip En savoir plus dans le document de requête update_or_create
Actualités
update(**kwargs, each:bool = False) -> int
Mettez à jour le modèle associé avec les paramètres de mots-clés fournis, renvoyant le nombre de lignes mises à jour.
Tip
Notez que pour les mises à jour relationnelles plusieurs-à-plusieurs, vous pouvez également accepter des paramètres avec des noms de champs et des dictionnaires de champs.
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 | |
Dans l'exemple ci-dessus, vous pouvez mettre à jour les propriétés de postcategory dans l'appel suivant:
1 2 3 | |
Filtrer et trier
Filtré par
filter(*args, **kwargs) -> QuerySet
Vous permet de filtrer par n'importe quel attribut/champ de modèle et d'obtenir des instances à l'aide de filtres sur les relations FK.
Tip
Exclusion de
exclude(*args, **kwargs) -> QuerySet
Fonctionne exactement de la même manière que le filtre, et tous les modificateurs (suffixes) sont les mêmes, mais renvoie la condition not.
Tip
Base de l'ordre
order_by(columns:Union[List, str]) -> QuerySet
Avec order_by(), vous pouvez trier les résultats de la base de données en fonction des champs que vous avez sélectionnés.
!!!tip En savoir plus dans le document de requête order_by
Connexions et sous-requêtes
Sélectionnez Related
select_related(related: Union[List, str]) -> QuerySet
Permet de pré-récupérer les modèles pertinents au cours de la même requête.
Avec select_lated, une seule requête est toujours exécutée sur la base de données, ce qui signifie qu 'une connexion (parfois complexe) est générée et que les modèles imbriqués ultérieurs sont traités en python.
!!!tip En savoir plus sur select_lated dans le document de requête
Pré-sélectionnez Related
prefetch_related(related: Union[List, str]) -> QuerySet
Permet de pré-récupérer les modèles pertinents lors d'une requête-mais contrairement à select_lated, chaque modèle suivant est récupéré dans une requête de base de données distincte.
Lorsque vous utilisez prefetch_lated, chaque modèle exécute une requête sur la base de données, ce qui signifie que vous exécutez plusieurs requêtes l'une après l'autre.
!!!tip En savoir plus dans le document de requête prefetch_lated
Pagination et nombre de lignes
pagination
paginate(page: int, page_size: int = 20) -> QuerySet
Une combinaison de méthodes de décalage et de restriction basées sur le numéro de page et la taille est disponible.
Tip
Limitation des limites
limit(limit_count: int) -> QuerySet
Vous pouvez limiter les résultats au nombre de modèles parents dont vous avez besoin.
Tip
compensation
offset(offset: int) -> QuerySet
Vous pouvez compenser les résultats par le nombre de modèles principaux que vous souhaitez.
Tip
Sélectionnez un sous-ensemble de colonnes
Le domaine
fields(columns: Union[List, str, set, dict]) -> QuerySet
Avec fields(), vous pouvez sélectionner un sous-ensemble des colonnes du modèle pour limiter la charge de données.
Tip
Exclure les champs
exclude_fields(columns: Union[List, str, set, dict]) -> QuerySet
Avec except_fields(), vous pouvez sélectionner un sous-ensemble des colonnes du modèle qui seront exclues pour limiter le chargement des données.
!!!tip En savoir plus dans le document de requête except_fields
Fonctions agrégées
Compter les
count(distinct: bool = True) -> int
Renvoie le nombre de lignes correspondant à une condition donnée (c'est-à-dire applique des filtres et exclusions)
Tip
Existence de
Existence () -> valeurs booléennes
Renvoie une valeur booléenne pour confirmer qu 'il y a des lignes qui répondent à un critère donné (appliqué avec des filtres et des exclusions)
Tip