2015-03-09 1 views
-1

Supposons que je fais un modèle:ManyToManyFields dans Django

class A(models.Model): 
     col = models.ManyToManyField(B) 

Maintenant après la migration, cela va créer un A_B de table avec champs id, A_id, B_id. Maintenant, si je veux accéder à l'ID de la table A_B, comment faire cela? Et comment mettre à jour le B_id de cette table?

+0

Pourquoi auriez-vous besoin de 'B_id'? Vous pouvez simplement accéder à B depuis l'autre côté comme B.col_set (ou similaire)? Pouvez-vous donner les noms de vos modèles * réels *, alors nous comprenons ce que vous essayez de modéliser? –

Répondre

1

Vous recherchez Through Relationships

class A(models.Model): 
     col = models.ManyToManyField(B, through='C') 

class C(models.Model): 
     a = models.ForeignKey(A) 
     b = models.ForeignKey(B) 
     //any other extra field 

Ensuite, vous pouvez filtrer ou d'une table de requête C.

Par exemple, pour imprimer tous C cas id:

for c in C.objects.all(): 
    print c.id 
+0

Je ne peux pas le faire sans utiliser une relation directe? –

+0

@PriyanshGoel Vous aurez besoin de SQL brut. – levi

1

Si vous avez un objet de A:

A_obj.col.all() 

Ceci renvoie tous les objets A_B liés à cette A

for ab in A_obj.col.all(): 
    print ab.id 

Cela affichera tous les identifiants de la table A_B.

for ab in A_obj.col.all(): 
    ab.B_id = new id 
    ab.save() 

Ceci va mettre à jour votre B_id avec le nouvel identifiant.