Django-fr

Forum

#1 13-09-2015 11:54:56

cobra85
Membre
Inscription : 11-05-2015
Messages : 58

Jointure entre table avec Django

Bonjour,

J'ai 3 tables avec un foreignkey qui les relient et je souhaite pouvoir afficher un tableau avec l'ensemble, ou un partie des 3 tables:
(Les tables si dessous sont un exemple)

moduls.py

class Utilisateur(models.Model):
    user = models.CharField(max_length=10)

class Voiture(models.Model):
    Responsable=models.ForeignKey(Utilisateur)
    Type=models.CharField(max_length=20)

class Immatriculation(models.Model):
    responsable=models.ForeignKey(Utilisateur)
    ville= models.CharField(max_length=30)

Et je souhaite faire une requête pour avoir l'ensemble sous forme de tableau.

J'ai lu que l'on pouvait utiliser "select_related()" mais je ne vois pas comment ?!
Comment afficher le résultat dans la page html ?

Merci

Hors ligne

#2 14-09-2015 09:26:53

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Jointure entre table avec Django

Le select_related permet d'optimiser le nombre de requêtes, mais il ne change rien au fonctionnement de base.
En revanche, tes Models sont étranges. Logiquement, on immatricule une voiture, pas un utilisateur wink
Pour comprendre le select_related: https://docs.djangoproject.com/fr/1.8/r … ct-related

Hors ligne

#3 14-09-2015 22:21:53

cobra85
Membre
Inscription : 11-05-2015
Messages : 58

Re : Jointure entre table avec Django

Bonjour, c'était un exemple !!

J'ai réussi pour faire la jointure entre deux tables:

requete = Voiture.objects.select_related("utilisateur").all().filter(id=id)

Mais comment inclure la 3 tables ? Faut-il faire un Manytomany ?

Merci

Hors ligne

#4 15-09-2015 21:17:04

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Jointure entre table avec Django

Pour inclure les 3 tables, je te conseille de faire un diagramme de classes pour que tu puisses mieux visualiser les relations et ensuite construire la requête correctement.

Hors ligne

#5 29-09-2015 13:12:18

djang
Membre
Inscription : 23-09-2015
Messages : 3

Re : Jointure entre table avec Django

Bonjour,
Je me permets de rebondir sur cette question car j'ai le même problème.
Pour me mettre dans une situation quasi identique, je voudrais faire une requete avec tous les éléments de la table voiture ainsi que la ville du responsable.
Cela semble très simple en sql mais je n'arrive pas à sortir toutes ces informations sous django.
Le resultats dans cet exemple pourrait être :
Voiture.object.all() ne me donne pas la ville.
J'attends comme resultat :
Responsable, type,Ville

Merci d'avance

Dernière modification par djang (29-09-2015 15:14:36)

Hors ligne

#6 24-11-2015 18:44:17

Alcolo47
Membre
Lieu : Toulouse
Inscription : 20-11-2015
Messages : 7

Re : Jointure entre table avec Django

Avec ce model (que je pense mauvais) on peut avoir LES villes DES immatriculations du responsable d'une voiture données.

imm_gen = (v.responsable.immatriculation_set.all() for v in Voiture.objects.all())
(imm.ville for imm in imm_gen)

Des select_related peuvent être ajoutés pour optimisation.


=================================================
Nouveau sur forum.
Développe un site python3 / django / django-cms sur un vps / d'ovh

Hors ligne

Pied de page des forums