PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để bạn nối hai bảng trên một trường khóa ngoài bằng cách sử dụng django ORM?

Tôi đã làm việc với django một thời gian và tôi đã có một thời gian khá khó khăn để tìm ra các phép tham gia bảng, nhưng tôi nghĩ rằng cuối cùng tôi đã hiểu và tôi muốn chuyển điều này cho những người khác để họ có thể tránh được sự thất vọng mà tôi đã có với nó.

Hãy xem xét mô hình sau.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'

Ở đây, chúng ta có thể thấy rằng location_id trong EventsBoardmeeting là khóa ngoại cho id trong EventsMeetinglocation . Điều này có nghĩa là chúng ta có thể truy vấn thông tin trong EventsMeetinglocation bằng cách xem qua EventsBoardmeeting .

Bây giờ hãy xem xét các view.py:

def meetings(request):
    meetingData = EventsBoardmeeting.objects.all()
    return render(request, 'board/meetings.html', {'data': meetingData })

Như đã nói nhiều lần trước đây trong các bài viết khác, django sẽ tự động xử lý các liên kết. Khi chúng tôi truy vấn mọi thứ trong EventsBoardmeeting chúng tôi cũng nhận được bất kỳ thông tin liên quan nào bằng khóa ngoại, Nhưng cách chúng tôi truy cập thông tin này trong html hơi khác một chút. Chúng ta phải đi qua biến được sử dụng làm khóa ngoại để truy cập thông tin được liên kết với phép nối đó. Ví dụ:

{% for x in data %}
   {{ x.location_id.name }}
{% endfor %}

Ở trên tham chiếu TẤT CẢ các tên trong bảng là kết quả của phép nối trên khóa ngoại. x về cơ bản là EventsBoardmeeting bảng, vì vậy khi chúng tôi truy cập x.location_id chúng tôi đang truy cập khóa ngoại cho phép chúng tôi truy cập thông tin trong EventsMeetinglocation .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django mô hình một khóa ngoại cho nhiều bảng

  2. Cách chuẩn bị các câu lệnh và tham số liên kết trong Postgresql cho C ++

  3. Giá trị sử dụng PostgreSQL từ hàng trước nếu thiếu

  4. Bản ghi trả về từ hàm có các cột được nối với nhau

  5. PostgreSQL multi INSERT ... RETURNING với nhiều cột