Django

[DRF] create vs perform_create

r잡초처럼 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