터칭 데이터

장고(Django) 정참조와 역참조 본문

장고 (Django)

장고(Django) 정참조와 역참조

터칭 데이터 2023. 11. 5. 00:26

 

 

 

장고 개발을 공부하다보면 정참조와 역참조라는 단어를 들으실 수 있을겁니다.

 

정참조와 역참조에 대해 나누어 설명을 드리겠습니다.

 

 

 

 

 

 

 

정참조(Forward Reference)란?

 

 

Django에서 '정참조(Forward Reference)'는 모델 간의 관계에서 한 모델이 다른 모델을 참조하는 방향을 나타냅니다. 일반적으로 ForeignKey, OneToOneField, ManyToManyField와 같은 관계 필드를 사용하여 정참조를 설정합니다. 이러한 관계 필드를 사용하면 모델 간의 관계를 정의하고 하나의 모델에서 다른 모델로의 참조를 만들 수 있습니다.

예를 들어, 다음은 `Author` 모델과 `Book` 모델 간의 정참조를 나타내는 Django 모델 예제입니다:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)



위의 코드에서 `Book` 모델은 `Author` 모델을 ForeignKey로 참조하고 있습니다. 이것은 `Book` 모델이 어떤 작가(`Author`)와 연결되어 있음을 나타냅니다. 이것이 정참조입니다. 즉, `Book` 모델이 `Author` 모델을 참조하고 있으므로 `Book` 모델은 `Author` 모델로의 정방향 참조를 가지고 있습니다.

정참조를 통해 모델 간의 관계를 설정하면 데이터베이스에서 테이블 간의 관계가 형성되며, Django는 이러한 관계를 사용하여 데이터를 쿼리하고 관리합니다. 이것은 Django의 ORM(객체 관계 매핑)의 핵심 개념 중 하나이며, 데이터베이스와 모델 간의 매핑을 효과적으로 처리하는 데 사용됩니다.

 

 

 

 

 

 

 

 

역참조(Reverse Lookup 혹은 Reverse Relationship)란?

 

 

Django 프레임워크에서 '역참조'는 모델 간의 관계에서 역방향으로 객체를 참조하는 것을 의미합니다. Django에서는 ForeignKey, OneToOneField, ManyToManyField와 같은 필드를 사용하여 모델 간의 관계를 정의할 수 있습니다. 이러한 관계 필드를 사용하면 하나의 모델에서 다른 모델로의 참조(정방향 참조)를 만들 수 있습니다.

그러나 '역참조'는 관계된 모델에서 역방향으로 연결된 모델의 역참조 이름을 사용하여 해당 모델로 다시 참조할 수 있도록 도와줍니다. 예를 들어, 다음과 같은 모델이 있다고 가정해봅시다:

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)



여기서 `Book` 모델은 `Author` 모델과 ForeignKey로 연결되어 있습니다. 이것은 책이 특정 작가와 연결되어 있음을 나타냅니다. 정방향으로 연결된 경우, `book.author`를 통해 책의 작가를 알 수 있습니다.

그런데 역참조를 사용하면, 'Author' 모델에서 'Book' 모델로 역방향으로 연결할 수 있습니다. 이를 통해 특정 작가가 작성한 모든 책을 가져올 수 있습니다. 역참조 이름은 기본적으로 소문자로 모델 이름과 "_set"을 붙여 생성됩니다. 따라서 위의 예에서 'Author' 모델에서 'Book' 모델로 역참조하려면 `author.book_set.all()`과 같은 방식으로 사용할 수 있습니다.

Django에서 역참조를 사용하면 관계된 모델 간의 연결을 효과적으로 탐색하고 관련된 객체를 검색할 수 있습니다.