Работя с django от известно време и имах доста трудно време да разбера присъединяването на таблицата, но мисля, че най-накрая разбрах и бих искал да предам това на други, за да могат да избегнат разочарованието, което имах с него.
Помислете за следния 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'
Тук можем да видим този location_id
в EventsBoardmeeting
е външен ключ за идентификатора в EventsMeetinglocation
. Това означава, че трябва да можем да потърсим информацията в EventsMeetinglocation
като преминете през EventsBoardmeeting
.
Сега помислете за следните views.py:
def meetings(request):
meetingData = EventsBoardmeeting.objects.all()
return render(request, 'board/meetings.html', {'data': meetingData })
Както беше посочено много пъти преди в май други публикации, django се грижи за присъединяванията автоматично. Когато правим заявка за всичко в EventsBoardmeeting
ние също получаваме всякаква свързана информация чрез външен ключ, но начинът, по който имаме достъп до това в html, е малко по-различен. Трябва да преминем през променливата, използвана като външен ключ, за да получим достъп до информацията, свързана с това присъединяване. Например:
{% for x in data %}
{{ x.location_id.name }}
{% endfor %}
Горното се позовава на ВСИЧКИ имена в таблицата, които са резултат от свързването на външен ключ. x
по същество е EventsBoardmeeting
таблица, така че когато имаме достъп до x.location_id
имаме достъп до външния ключ, който ни дава достъп до информацията в EventsMeetinglocation
.