Relation avec
Actuellement, Ormar prend en charge deux types de relations:
- Un à plusieurs (et plusieurs à un) avec le champ foreignkey
- Plusieurs à plusieurs avec un champ ManyToMany
Vous trouverez ci-dessous un exemple de définition très basique de chaque relation.
Pour en savoir plus sur les méthodes, les possibilités, les définitions, etc., lisez les sections suivantes du document.
Clés étrangères
Pour définir une relation plusieurs-à-un, utilisez un champ de clé étrangère.
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 | |
!!! Astuce Pour en savoir plus sur les relations un à plusieurs, visitez la section Clés étrangères
Clé étrangère inversée
La définition d'une relation un-à-plusieurs utilise également ForeignKey, qui s'inscrit automatiquement pour vous.
Donc, en ce qui concerne l'exemple ci-dessus.
1 2 3 4 5 6 7 8 | |
!!!Conseil Pour en savoir plus sur les relations plusieurs-à-un (c'est-à-dire pour modifier le nom du champ généré), visitez la section Clés étrangères
!!!La tip ReverseforeignKey vous permet d'interroger des modèles pertinents avec Queryset-proxy.
1 | |
Plusieurs à plusieurs
Pour définir une relation plusieurs à plusieurs, utilisez le champ ManyToMany.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
!!! Astuce Pour en savoir plus sur les relations plusieurs-à-plusieurs, visitez la section plusieurs-à-plusieurs
!!!tip ManyToMany vous permet d'interroger des modèles pertinents avec Queryset-proxy.
1 | |
A travers les champs
Dans le cadre de la relation ManyToMany, vous pouvez définir un modèle de passage direct qui peut contenir des champs supplémentaires qui peuvent être utilisés pour le filtrage, le tri, etc. Les champs définis de cette manière seront exposés sur le revers de la requête actuelle du modèle m2m.
Ainsi, si une requête est effectuée à partir du modèle A vers le modèle B, seul le modèle B expose le champ through. Lequel a du sens, car il s'agit d'un modèle/champ unidirectionnel pour chaque modèle pertinent.
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 | |
!!!tip Pour en savoir plus sur les relations plusieurs-à-plusieurs et les champs, visitez la section plusieurs-à-plusieurs
!!!tip ManyToMany vous permet d'interroger des modèles pertinents avec Queryset-proxy.
1 | |
Ordre de tri par défaut des relations
Par défaut, les relations suivent l'ordre de tri par défaut du modèle, de sorte que la colonne Primary_key est ascendante, ou tout ordre de tri dans l'objet ormar_config.
!!! Astuce Pour en savoir plus sur l'ordre de tri des modèles, visitez la section Modèles de la documentation
Mais vous pouvez modifier l'ordre dans lequel les modèles associés sont chargés pendant une requête en fournissant les paramètres orders_by et related_orders_by à la relation.
Dans une relation, vous ne pouvez trier que par colonnes de modèle directement liées ou, pour les colonnes plusieurs à plusieurs, par colonnes de modèle {through_field_name}__{column_name}
Un exemple de configuration peut ressembler à ceci:
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 | |
Appelez maintenant:
await Author.objects.select_related("books").get() - Les livres seront triés par ordre décroissant par année de livre
await Book.objects.select_related("author").all() - Les auteurs seront triés par ordre croissant de nom d'auteur
Auto-référencement et référencement différé
Pour créer une relation automatique ou créer deux modèles qui se réfèrent l'un à l'autre dans au moins deux relations différentes (rappelez-vous que le revers est automatiquement enregistré pour vous), vous devez utiliser ForwardRef dans le module d'entrée.
1 2 3 4 5 6 7 8 9 10 11 12 | |
!!! Astuce Pour en savoir plus sur l'auto-référencement et les relations différées, visitez la section Commentaires différés