r잡초처럼
바른 프로그래밍
r잡초처럼
전체 방문자
오늘
어제
  • 분류 전체보기 (124)
    • FastAPI (7)
    • 끄적끄적 (2)
    • Python (17)
    • Django (31)
    • Database (2)
    • Docker (7)
    • 디자인패턴 (2)
    • CS 공부 (12)
      • 알고리즘 (2)
      • 자료 구조 (1)
      • 네트워크 (7)
      • IT 지식 (1)
      • 운영체제 (1)
    • 기타 팁들 (10)
    • Aws (2)
    • 독서 (1)
    • 코딩테스트 공부 (1)
      • 백준 (0)
      • 프로그래머스 (1)
    • DevOps (13)
    • TIL (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Batch
  • 상속 안티 패턴
  • 랜과 왠
  • 랜 카드
  • fastapi
  • cp949
  • 케이블의 종류
  • 네트워크
  • docker
  • query param
  • pytest
  • validate
  • 모두의 네트워크
  • 컴퓨터 기본 지식
  • 상속과 컴포지션
  • 파이썬 클린 코드
  • 5장 회사에서 하는 랜 구성
  • encoding
  • 책 리뷰
  • 물리 계층
  • pycharm
  • 완벽한 IT 인프라 구축을 위한 Docker
  • 6장
  • preonboarding
  • 전기 신호
  • 7장
  • dotenv
  • CS 지식
  • depends
  • poetry

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
r잡초처럼

바른 프로그래밍

Django

[DRF] HyperlinkedModelSerializer 살펴보기

2023. 1. 12. 13:33

ModelSerializer에 이어서 HyperlinkedModelSerializer를 살펴보자

  • HyperlinkedModelSerializer는 ModelSerializer와 비슷하다. 단지 관계를 표현할 때  기본 키가 아닌 하이퍼링크로 표현한다는 점을 제외하곤.
  • 기본적으로 serializer에는 기본 키 필드 대신 URL 필드가 포함된다.
  • URL 필드는 HyperlinkedIdentifyField serializer 필드를 사용하여 표현되며 모델의 모든 관계는 HyperlinkedRelatedField serializer 필드를 사용하여 표현된다. 필드 옵션에 추가하여 기본 키를 명시적으로 포함할 수 있다. 예를 들면 아래와 같다.
class AccountSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Account
        fields = ['url', 'id', 'account_name', 'users', 'created']

Absolute and relative URLs

HyperlinkedModelSerializer를 인스턴스화할 때 serializer context에 현재 요청을 포함해야 한다. 예를 들면 다음과 같다.

serializer = AccountSerializer(queryset, context={'request': request})

이렇게 하면 하이퍼링크에 적절한 호스트 이름이 포함되므로 다음과 같이 완전한 URL을 사용한다.

http://api.example.com/accounts/1/

relative URL은 다음과 같다.

/accounts/1/

상대 URL을 사용하려면 serailizer context에서 {'request': None}을 명시적으로 전달해야 한다.

How hyperlinked views are determined

모델 인스턴스에 대한 하이퍼링크를 위해 어떤 뷰를 사용해야 하는지 결정하는 방법이 필요하다. 기본적으로 하이퍼링크는 '{model_name}-detail'과 일치하는 view_name에 해당해야 하며 pk 키워드 인수로 인스턴스를 조회한다. extra_kwargs 설정에서 view_name 및 lookup_field 옵션 중 하나 또는 둘 모두를 사용하며 URL 필드 view_name 및 조회 필드를 재정의할 수 있다.

class AccountSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Account
        fields = ['account_url', 'account_name', 'users', 'created']
        extra_kwargs = {
            'url': {'view_name': 'accounts', 'lookup_field': 'account_name'},
            'users': {'lookup_field': 'username'}
        }

또는 필드에서 명시적으로 설정할 수 있다.

class AccountSerializer(serializers.HyperlinkedModelSerializer):
    url = serializers.HyperlinkedIdentityField(
        view_name='accounts',
        lookup_field='slug'
    )
    users = serializers.HyperlinkedRelatedField(
        view_name='user-detail',
        lookup_field='username',
        many=True,
        read_only=True
    )

    class Meta:
        model = Account
        fields = ['url', 'account_name', 'users', 'created']

'Django' 카테고리의 다른 글

[QuerySet] Built-in Expressions - F() 표현식 알아보기  (0) 2023.01.17
[Queryset] select_related와 prefetch_related 살펴보기  (0) 2023.01.13
[DRF] ModelSerializer 살펴보기  (0) 2023.01.11
Django의 특징  (1) 2022.12.24
Gunicorn에 대해 알아보자.  (0) 2022.12.23
    'Django' 카테고리의 다른 글
    • [QuerySet] Built-in Expressions - F() 표현식 알아보기
    • [Queryset] select_related와 prefetch_related 살펴보기
    • [DRF] ModelSerializer 살펴보기
    • Django의 특징
    r잡초처럼
    r잡초처럼
    오늘보다 내일 더 나은 개발자가 되기 위한 노력을 기록하는 블로그 입니다.

    티스토리툴바