PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie verbinden Sie zwei Tabellen in einem Fremdschlüsselfeld mit Django ORM?

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 .