sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan forbinder man to tabeller på et fremmednøglefelt ved hjælp af django ORM?

Jeg har arbejdet med django i et stykke tid nu, og jeg har haft en temmelig hård tid med at finde ud af, at bordet slutter sig til, men jeg tror, ​​at jeg endelig forstår det, og jeg vil gerne give dette videre til andre, så de kan undgå den frustration, jeg havde med det.

Overvej følgende model.py:

class EventsMeetinglocation(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=200)

    class Meta:
        managed = True
        db_table = 'events_meetinglocation'

class EventsBoardmeeting(models.Model):
    id = models.IntegerField(primary_key=True)
    date = models.DateTimeField()
    agenda_id = models.IntegerField(blank=True, null=True)
    location_id = models.ForeignKey(EventsMeetinglocation)
    minutes_id = models.IntegerField(blank=True, null=True)

    class Meta:
       managed = True
       db_table = 'events_boardmeeting'

Her kan vi se det location_id i EventsBoardmeeting er en fremmednøgle til id'et i EventsMeetinglocation . Det betyder, at vi burde være i stand til at forespørge oplysningerne i EventsMeetinglocation ved at gå gennem EventsBoardmeeting .

Overvej nu følgende views.py:

def meetings(request):
    meetingData = EventsBoardmeeting.objects.all()
    return render(request, 'board/meetings.html', {'data': meetingData })

Som nævnt mange gange før i maj andre indlæg, tager django sig af joins automatisk. Når vi forespørger på alt i EventsBoardmeeting vi får også alle relaterede oplysninger med fremmednøgle, men måden vi får adgang til dette i html er lidt anderledes. Vi er nødt til at gennemgå den variabel, der bruges som fremmednøgle for at få adgang til de oplysninger, der er knyttet til det join. For eksempel:

{% for x in data %}
   {{ x.location_id.name }}
{% endfor %}

Ovenstående refererer til ALLE navnene i tabellen, der var resultatet af joinforbindelsen på fremmednøgle. x er i bund og grund EventsBoardmeeting tabel, så når vi tilgår x.location_id vi får adgang til den fremmednøgle, som giver os adgang til oplysningerne i EventsMeetinglocation .



  1. SQL Server 2005 - Eksporter tabel programmatisk (kør en .sql-fil for at genopbygge den)

  2. 2 måder at returnere ikke-numeriske værdier i SQLite

  3. ORA-20001 i R12 Indsaml skemastatistik på 11g(FND_HISTOGRAM_COLS)

  4. Sletning af poster fra en ekstern postgresql-database ved hjælp af lokalt leveret liste