Modèle Django: ManyToManyField

Exemple de modèle et définition

Prenons l'exemple d'un joueur de football (Joueur) et de sa position (Position).

  1. Les athlètes peuvent occuper plusieurs positions
  2. Il y a plusieurs joueurs dans la même position

Dans ce cas, ManyToMany entre en jeu.

Exemple de modèle


class Position(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=20, unique=True)


class Player(models.Model):
... (Omis) ...
    position = models.ManyToManyField(Position)

Après la migration de Django à l'aide de la définition de modèle ci-dessus, les trois tables suivantes seront créées. image.png

La table nommée player_position est le PK de la table de joueur et le PK de la table de position, et les informations sont gérées comme suit. image.png

Exemple de recherche

Extraire toutes les positions du joueur "Pirlo"

positions = Player.objects.get(name='Pirlo').position.all()
[print(p.name) for p in positions]

Résultat de l'exécution:
DM
CM

Extraire tous les joueurs en position "CB" (Méthode 1)

players = Player.objects.filter(position=Position.objects.get(name='CB'))
[print(p.name) for p in players]

Résultat de l'exécution:
Maldini
Nesta

Extraire tous les joueurs en position "CB" (Méthode 2)

Exemple de modèle (méthode 2)


class Player(models.Model):
... (Omis) ...
    position = models.ManyToManyField(Position, related_name='player')
players = Position.objects.get(name='CB').player.all()
[print(p.name) for p in players]

Résultat de l'exécution:
Maldini
Nesta

Postscript

La méthode 1 et la méthode 2 sont les méthodes 1 et 2 qui extraient tous les joueurs dans la position «CB», mais lorsque j'ai vérifié la requête créée, les deux ont généré le SQL suivant.

SELECT "soccer_player"."id", "soccer_player"."name", "soccer_player"."team_id"
FROM "soccer_player"
INNER JOIN "soccer_player_position" ON ("soccer_player"."id" = "soccer_player_position"."player_id")
WHERE "soccer_player_position"."position_id" = 1

Recommended Posts

Modèle Django: ManyToManyField
Modifications du modèle dans Django
Django haute performance - Modèle
Personnalisation du champ de modèle Django Divers
Django
Utiliser le modèle django de l'interpréteur
Afficher Django ManyToManyField dans un modèle
Créez un modèle de suivi facile à utiliser avec Django en utilisant ManyToManyField via
Jointure externe gauche dans le modèle Django
Générer automatiquement un diagramme de relation de modèle avec Django
mise à jour de Django
Django Note 4
Django: la migration ne reflète pas le modèle dans DB
Développement d'une application WEB avec Django [Définition de modèle]
Mémorandum Django
recherche django
Résumé de Django
Test Django
Créez un modèle pour votre planning Django
Django # 2 (modèle)
Django Note 5
Django Hands On
Touchez django
Mémo Django
Résumé de Django
Les bases de Django
Django Shoho
Paramètres initiaux de Django
Django + Docker
Obtenir un modèle de référence à l'aide de Django Serializer
Glossaire Django
Installation de Django
Django: Références
Django Note 1
Django Note 3
Django Note 2
Implémenter un modèle utilisateur personnalisé dans Django
Démarrage de Django
Mémo Django
Django NullCharField
Résumé du tutoriel Django pour les débutants par les débutants ② (Modèle, Admin)
[django] Quand le modèle modifié est mis à jour et quand il n'est pas mis à jour