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
.