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 .