2015-10-23 8 views
5

Ho tre modelli.Come eseguire due join interni in un set di sequenze in Django

class A(models.Model): 
    status = models.PositiveSmallIntegerField() 
    status_time = models.DateTimeField(auto_now_add=True) 
    b = models.ForeignKey(B) 
    d=models.ForeignKey(D) 

class B(models.Model): 
    ***other Fileds***** 
    c = models.OneToOneField(C) 
    ***other fields*** 

class C(models.Model): 
    c_name = models.CharField(max_length=9,unique=True) 

Voglio eseguire una query in cui è possibile ottenere tutto il nome_c.

SELECT * FROM A inner join B on A.b_id=B.id inner join 
C on B.c_id=C.id where A.d_id=1 and A.status=6 

qualcuno può aiutare per favore come fare. Ho trovato una domanda simile qui, ma è troppo complesso da capire per un principiante come me. Ti bramano così tanto per qualsiasi aiuto.

+0

Tutte le c_names per che cosa? 'C.objects.values ​​('c_name')'? 'A.b.c__c_name'? non è chiaro cosa stai chiedendo, sono anche abbastanza sicuro che hai fatto questa domanda prima..Inoltre la query che hai mostrato non ottiene il 'c_name', ottiene tutti i campi da' c' – Sayse

+0

io sono un più fresco, mentre stavo lottando il mio amico mi ha suggerito di pubblicare la domanda qui. Ho reso il mio account 2 ore prima. e questa è la mia prima domanda. Non ho mai fatto domande su questo sito. –

+0

Abbastanza corretto, Questa domanda quasi esatta è stata fatta ieri o il giorno prima è il motivo per cui l'ho chiesto .. Se hai già l'istanza di un secondo, il mio secondo frammento dovrebbe funzionare. Inoltre, non esitate a fare domande come questa se rimarrete bloccati! :) – Sayse

risposta

2

Qualcosa di simile

C.objects.filter(b__a__status=6, b__a__d=1).values_list('c_name', flat=True).distinct() 

o questo

A.objects.filter(status=6, d=1).values_list('b__c__c_name', flat=True).distinct() 
+0

+1. thnx. Ha funzionato. Avevo bisogno di eseguire 5 query db in cui ho richiesto più inner join. Ho usato la tua query e ho fatto .query per stamparlo. capito così bene che ho fatto tutte quelle domande negli ultimi 30 minuti in cui stavo lottando dagli ultimi 24hrs.once ancora una volta grazie mille. –

Problemi correlati