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 하면 된다.
참고
'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 |