私はしばらく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
のIDの外部キーです 。これは、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
の情報にアクセスできる外部キーにアクセスしています 。