Ich arbeite jetzt schon eine Weile mit Django und hatte eine ziemlich schwierige Zeit, um die Tischverbindungen herauszufinden, aber ich glaube, ich habe es endlich verstanden und ich möchte dies an andere weitergeben, damit sie die Frustration vermeiden können, die ich hatte damit.
Betrachten Sie die folgende 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'
Hier können wir diese location_id
sehen in EventsBoardmeeting
ist ein Fremdschlüssel für die ID in EventsMeetinglocation
. Das bedeutet, dass wir in der Lage sein sollten, die Informationen in EventsMeetinglocation
abzufragen indem Sie durch EventsBoardmeeting
gehen .
Betrachten Sie nun die folgende Datei views.py:
def meetings(request):
meetingData = EventsBoardmeeting.objects.all()
return render(request, 'board/meetings.html', {'data': meetingData })
Wie schon oft in anderen Beiträgen erwähnt, kümmert sich Django automatisch um Joins. Wenn wir alles in EventsBoardmeeting
abfragen Wir erhalten auch alle zugehörigen Informationen per Fremdschlüssel, aber die Art und Weise, wie wir in HTML darauf zugreifen, ist etwas anders. Wir müssen die als Fremdschlüssel verwendete Variable durchlaufen, um auf die Informationen zuzugreifen, die diesem Join zugeordnet sind. Zum Beispiel:
{% for x in data %}
{{ x.location_id.name }}
{% endfor %}
Das Obige verweist auf ALLE Namen in der Tabelle, die das Ergebnis der Verknüpfung mit dem Fremdschlüssel waren. x
ist im Wesentlichen das EventsBoardmeeting
Tabelle, also wenn wir auf x.location_id
zugreifen Wir greifen auf den Fremdschlüssel zu, der uns Zugriff auf die Informationen in EventsMeetinglocation
gibt .