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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

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

바른 프로그래밍

Django

[DRF] create vs perform_create

2023. 2. 24. 01:39

create와 perform_create는 Django REST Framework에서 사용되는 두 개의 메소드이다.

create 메소드는 API 뷰에서 POST 요청을 받을 때, 새로운 객체를 생성하는 메소드이다. 이 메소드는 일반적으로 API Serializer 클래스의 save() 메소드를 호출하고, 데이터 유효성 검사를 수행하여 새로운 객체를 생성한다. 그리고 생성된 객체를 HTTP response로 반환한다.

def create(self, validated_data):
    email = validated_data.get("email", None)
    validated.pop("email") 
    # Now you have a clean valid email string 
    # You might want to call an external API or modify another table
    # (eg. keep track of number of accounts registered.) or even
    # make changes to the email format.

    # Once you are done, create the instance with the validated data
    return models.YourModel.objects.create(email=email, **validated_data)



반면에, perform_create 메소드는 create 메소드의 하위 메소드로, 객체 생성 전에 추가적인 로직을 수행하는 메소드이다. 이 메소드를 사용하여 생성될 객체의 일부 데이터를 설정하거나, 객체가 생성되기 전에 관련된 다른 모델을 가져오는 등의 작업을 수행할 수 있다. 요청 데이터의 일부가 아닌 특성을 설정하는 데 특히 유용하다.

def perform_create(self, serializer):
    serializer.save(user=self.request.user)

정리하자면 Serializer의 새로운 인스턴스를 생성 또는 변경한다면 create()를 쓰고, 새로운 인스턴스를  생성 후 DB에 요청받은 데이터가 아닌 다른 데이터를 설정할 때는 perform_create()를 override 하면 된다.


참고

https://stackoverflow.com/questions/41094013/when-to-use-serializers-create-and-modelviewsets-perform-create

'Django' 카테고리의 다른 글

Django staticfile 관리하기  (0) 2023.03.01
[DRF] Serializer relations  (0) 2023.02.26
[DRF] APIView vs ViewSet  (0) 2023.02.20
Django 구조 잡기  (0) 2023.02.18
[DRF] SearchFilter  (0) 2023.02.16
    'Django' 카테고리의 다른 글
    • Django staticfile 관리하기
    • [DRF] Serializer relations
    • [DRF] APIView vs ViewSet
    • Django 구조 잡기
    r잡초처럼
    r잡초처럼
    오늘보다 내일 더 나은 개발자가 되기 위한 노력을 기록하는 블로그 입니다.

    티스토리툴바