Il faut parfois utiliser des m2m. Dans django, il y a deux moyens de les utiliser. Soit d’une façon simple, en déclarant juste un ManyToManyField soit en passant par une table explicite grâce à l’argument through.
L’argument through permet d’avoir une table explicitement déclaré que l’on peut donc manipuler avec l’ORM.
Mais si on utilise la méthode commune, celle où c’est django qui fait tout, on pourrait avoir l’impression que l’on a alors, plus accès à cette table de jointure. Ce n’est pas utile allez vous me dire, on s’en fout, la seule info que l’on manque c’est la pk des tuples.
C’est vrai dans la plupart des cas. Mais comment faire si vous veniez à avoir besoin de pouvoir mettre la main sur ces PK ? Si par exemple vous voulez synchroniser des choses ??
Et bien, les choses sont bien faites en django. Il existe en effet une données membres through qui permet de récupérer la table créer automatiquement dans django.
Un petit exemple (en reprenant celui de django)
# ...
class Pizza(models.Model):
# ...
toppings = models.ManyToManyField(Topping)
pour avoir accés à la table qui relie les Pizza au Topping il suffit de faire :
et donc pour filter il suffit de faire :
Et voilà.
One thought on “M2m, tout petite astuce”
Comments are closed.