sql >> データベース >  >> RDS >> PostgreSQL

django ORMを使用して、外部キーフィールドで2つのテーブルをどのように結合しますか?

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



    1. Puppetを使用したBarmanの自動化:it2ndq / barman(パート2)

    2. MySQLの大文字と小文字を区別するクエリ

    3. SQLServerで「datediff関数がオーバーフローを引き起こしました」エラーを修正する方法

    4. 1つのSQLクエリで2つのテーブルをマージし、日付値を一意にします