Saya telah bekerja dengan Django untuk sementara waktu sekarang dan saya memiliki waktu yang cukup sulit untuk mencari tahu tabel bergabung, tetapi saya pikir saya akhirnya mengerti dan saya ingin meneruskan ini kepada orang lain sehingga mereka dapat menghindari frustrasi yang saya miliki dengan itu.
Perhatikan model.py berikut:
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'
Di sini kita dapat melihat bahwa location_id
di EventsBoardmeeting
adalah kunci asing untuk id di EventsMeetinglocation
. Ini berarti bahwa kita harus dapat menanyakan informasi di EventsMeetinglocation
melalui EventsBoardmeeting
.
Sekarang perhatikan views.py berikut:
def meetings(request):
meetingData = EventsBoardmeeting.objects.all()
return render(request, 'board/meetings.html', {'data': meetingData })
Seperti yang dinyatakan berkali-kali sebelumnya dalam posting lainnya, Django menangani penggabungan secara otomatis. Saat kami menanyakan semuanya di EventsBoardmeeting
kami juga mendapatkan informasi terkait dengan kunci asing juga, tetapi cara kami mengakses ini di html sedikit berbeda. Kita harus melalui variabel yang digunakan sebagai kunci asing untuk mengakses informasi yang terkait dengan gabungan itu. Misalnya:
{% for x in data %}
{{ x.location_id.name }}
{% endfor %}
Referensi di atas SEMUA nama dalam tabel yang merupakan hasil gabungan pada kunci asing. x
pada dasarnya adalah EventsBoardmeeting
tabel, jadi ketika kita mengakses x.location_id
kami mengakses kunci asing yang memberi kami akses ke informasi di EventsMeetinglocation
.