sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur sammanfogar du två tabeller på ett främmande nyckelfält med django ORM?

Jag har jobbat med django ett tag nu och jag har haft ganska svårt att räkna ut bordets kopplingar, men jag tror att jag äntligen förstår och jag skulle vilja föra detta vidare till andra så att de kan undvika frustrationen som jag hade med den.

Tänk på följande 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'

Här kan vi se det location_id i EventsBoardmeeting är en främmande nyckel för ID:t i EventsMeetinglocation . Det betyder att vi bör kunna fråga informationen i EventsMeetinglocation genom att gå igenom EventsBoardmeeting .

Tänk nu på följande views.py:

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

Som sagt många gånger tidigare i andra inlägg i maj, tar django hand om anslutningar automatiskt. När vi frågar allt i EventsBoardmeeting vi får också all relaterad information med främmande nyckel också, men sättet att komma åt detta i html är lite annorlunda. Vi måste gå igenom variabeln som används som främmande nyckel för att komma åt informationen som är associerad med den joinen. Till exempel:

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

Ovanstående refererar till ALLA namn i tabellen som var resultatet av kopplingen på främmande nyckel. x är i huvudsak EventsBoardmeeting tabell, så när vi kommer åt x.location_id vi kommer åt den främmande nyckeln som ger oss tillgång till informationen i EventsMeetinglocation .



  1. Hur hittar jag dubbletter över flera kolumner?

  2. Running Total by Group SQL (Oracle)

  3. Postgres datatyp cast

  4. 2nd Quadrant på PostgresConf US 2018