Rappresenta una relazione uno a molti in Django

Vaibhav Vaibhav 30 gennaio 2023
  1. Rappresentare una relazione uno a molti utilizzando un modello di giunzione/intermediario
  2. Rappresentare relazioni uno a molti utilizzando chiavi esterne
Rappresenta una relazione uno a molti in Django

I database svolgono un ruolo chiave quasi ovunque e non sorprende che lo sviluppo web sia uno di questi posti. Costruire tabelle e impostare relazioni tra tabelle utilizzando SQL è un compito semplice, ma Django lo rende ancora più semplice.

Questo articolo introdurrà come rappresentare una a molte relazioni in Django.

Rappresentare una relazione uno a molti utilizzando un modello di giunzione/intermediario

Fare riferimento alle definizioni dei seguenti modelli.

class Number(models.Model):
    number = models.CharField(max_length=10)


class Person(models.Model):
    name = models.CharField(max_length=200)


class PersonNumber(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="numbers")
    number = models.ForeignKey(Number, on_delete=models.CASCADE, related_name="person")

Il modello Number dispone di un campo number per memorizzare un numero di telefono.

Il modello Person ha un campo name per il nome della persona.

PersonNumber è un modello di giunzione o intermediario per “Numero” e “Persona”. Le chiavi esterne hanno una relazione a cascata con gli oggetti a cui si fa riferimento. Questo modello può essere utilizzato per impostare una relazione uno-a-molti e una relazione molti-a-molti.

La chiave primaria predefinita per tutti i modelli è id, un campo automatico intero.

Poiché un numero di telefono è associato solo a una singola persona, ma una persona può avere più di un numero di telefono, si tratta di una relazione uno a molti. PersonNumber sarà usato per rappresentare questa relazione.

Se una variabile person sta memorizzando un oggetto Person, possiamo facilmente accedere a tutti i numeri di telefono di questa persona utilizzando la seguente istruzione.

numbers = person.numbers.objects.all()

Questa istruzione restituirà un QuerySet di oggetti Number.

Considera questo esempio.

ID Person Number
1 1 1
2 1 2
3 1 3
4 1 4
5 2 5
6 2 6
7 3 7

Una persona con id 1 ha quattro numeri di telefono con id 1, 2, 3 e 4.
Una persona con id 2 ha due numeri di telefono con id 5 e 6.
Una persona con id 3 ha un solo numero di telefono con id 7.

Rappresentare relazioni uno a molti utilizzando chiavi esterne

Fare riferimento alle definizioni dei seguenti modelli.

class Person(models.Model):
    name = models.CharField(max_length=200)


class Number(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    number = models.CharField(max_length=10)

Il modello Person ha un campo name per il nome della persona.

Il modello Number ha un campo number per memorizzare un numero di telefono e un riferimento di chiave esterna al modello Person. Questo campo memorizzerà il proprietario di questo numero. La chiave esterna ha una relazione a cascata con il modello di riferimento, Person.

Usando questa struttura, possiamo facilmente associare ogni oggetto Number al suo rispettivo proprietario usando il riferimento della chiave esterna.

Se una variabile person sta memorizzando un oggetto Person, possiamo accedere a tutti i numeri associati a questa persona utilizzando la seguente istruzione.

numbers = Number.objects.filter(person=person)

Questa istruzione restituirà un QuerySet di oggetti Number.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.