Django Academy · Lezione

related_name e ricerche inverse

Attraversare le relazioni in entrambe le direzioni

Lezione 4 di 413 passaggi

related_name e ricerche inverse è una lezione Django Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Django Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Django Academy include 4 lezioni in totale.

I collegamenti funzionano in entrambe le direzioni

Ha impostato una ForeignKey dal libro all'autore, ma può anche percorrerla all'indietro. Una ricerca inversa raggiunge il lato dei molti partendo dal lato dell'uno.

Il manager _set predefinito

Per impostazione predefinita Django assegna all'accessor inverso il nome modelname_set. Da un autore, i libri sono disponibili come book_set.

author = Author.objects.first()
author.book_set.all()

_set è un manager

book_set è un manager completo, quindi può concatenare filter, order_by e count proprio come in qualsiasi query.

author.book_set.filter(published=True).count()

Assegnare un nome con related_name

Il nome _set è poco intuitivo. Imposti related_name sulla ForeignKey per scegliere personalmente un accessor inverso più chiaro.

author = models.ForeignKey(Author, related_name="books", on_delete=models.CASCADE)

Un inverso più chiaro

Ora il lato inverso si legge in modo naturale. Invece di book_set, basta scrivere books, molto più facile da seguire.

author.books.all()

L'inverso nelle query

related_name determina anche il modo di usare filter attraverso il collegamento. Usi il nome scelto con il doppio underscore partendo dall'altro modello.

Author.objects.filter(books__published=True)

Il nome predefinito della query

Se omette related_name, il nome della query inversa è il nome del modello in minuscolo, ad esempio author.objects.filter(book__title=...).

Evitare conflitti tra nomi

Due ForeignKey dello stesso modello verso la stessa destinazione entrano in conflitto con il nome inverso. Un related_name distinto per ciascuna risolve il problema.

writer = models.ForeignKey(User, related_name="written", on_delete=models.CASCADE)
editor = models.ForeignKey(User, related_name="edited", on_delete=models.CASCADE)

Disattivare l'inverso

Imposti related_name su un valore che termina con + per disattivare completamente l'accessor inverso quando non le serve.

owner = models.ForeignKey(User, related_name="+", on_delete=models.CASCADE)

related_query_name

Può separare i nomi: related_query_name imposta separatamente il nome usato nei filtri rispetto all'attributo con cui si leggono le righe correlate.

tags = models.ManyToManyField(Tag, related_name="posts", related_query_name="post")

Funziona con ogni relazione

related_name si applica allo stesso modo a ForeignKey, ManyToManyField e OneToOneField, così ogni percorso inverso può avere un nome chiaro.

Verifica rapida

Ha impostato related_name="books" sulla ForeignKey author di Book. Come elenca i libri di un autore?

Riepilogo

Ce l'ha fatta! Le ricerche inverse percorrono un collegamento all'indietro e related_name trasforma gli accessor _set poco intuitivi in nomi chiari e leggibili. 🔄

Gratis per iniziare

Impara Python con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «related_name e ricerche inverse» è gratuita?

Sì — il testo completo di «related_name e ricerche inverse» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Django Academy, passa a CoddyKit PRO. Il corso Django Academy include 4 lezioni in totale.

Cosa imparerò in «related_name e ricerche inverse»?

Attraversare le relazioni in entrambe le direzioni Eserciti Django Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Django Academy?

Non è richiesta alcuna esperienza precedente. Django Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «related_name e ricerche inverse»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Django Academy?

Sì. Ogni lezione Django Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. ForeignKey e on_delete
  2. ManyToManyField e modelli through
  3. OneToOneField per i profili
  4. related_name e ricerche inverse
← Torna a Django Academy