카테고리 없음

TIL/72/20230620 정리중

woongpang 2023. 6. 20. 22:11
728x90

Django에서, 우리는 종종 서로 관련된 데이터를 다루게 됩니다. 예를 들어, 소셜 미디어 앱에서는 사용자(User)와 게시물(Post)이 서로 연관되어 있습니다. 이때 사용자와 게시물 사이의 관계를 어떻게 처리할까요? Django에서는 정참조와 역참조라는 개념을 사용하여 이러한 연관성을 처리합니다.


정참조(Forward Reference): 정참조는 어떤 오브젝트가 다른 오브젝트를 '가리키는' 관계를 의미합니다. 예를 들어, 우리가 게시물(Post)을 보면, 이 게시물은 어떤 사용자(User)에 의해 작성되었습니다. 이 경우, 게시물이 사용자를 '가리키고' 있는 것이죠. Django에서 이 정참조 관계를 명시하려면, ForeignKey 필드를 사용합니다.
역참조(Backward Reference): 역참조는 정참조와 반대 방향의 관계를 의미합니다. 사용자(User) 입장에서 생각해보면, 이 사용자가 작성한 모든 게시물(Post)들의 목록이 필요할 수 있습니다. 이 관계를 다루는 것이 역참조입니다. 이 관계는 자동으로 생성되지만, Django에서 QuerySet API의 related_name으로 참조할 수 있습니다.

 

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

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts')

위 코드에는 사용자(User) 모델과 게시물(Post) 모델이 있습니다. 게시물 모델은 author라는 필드를 사용하여 사용자를 가리키고(ForeignKey)있습니다. 이 관계를 통해 게시물의 작성자를 찾도록 할 수 있어요.

post = Post.objects.get(id=1)
author = post.author

그리고 사용자가 작성한 모든 게시물 목록을 찾고 싶을 때 역참조를 사용하며, 이 경우 다음과 같이 할 수 있습니다.

user = User.objects.get(id=1)
posts = user.posts.all()
728x90