0

필자는 serializer에서보기를 만들어 내 응용 프로그램의 프런트 엔드에 사용자 지정 응답을 보내려고합니다. 나머지 프레임 워크 응답 자습서를 시도했지만 작동하지 않습니다. 내 코드 :django rest framework에서 serializer의 사용자 정의 오류 응답을 보냅니 까?

class UserSerializer(serializers.ModelSerializer): 
"""Serializer to serialize user model object""" 

    class Meta: 
     model = User 
     fields = ('id', 'username', 'password', 'first_name', 'last_name') 
     extra_kwargs = {'password': {'write_only': True}} 

    def create(self, validated_data): 
     """create a new user""" 

     firstname = self.initial_data['first_name'] 
     lastname = self.initial_data['last_name'] 
     fullname = str(firstname) +" "+ str(lastname) 
     email = self.initial_data['username'].lower() 

     try: 
      customer = User.create(
       name=fullname, 
       email=email) 

     except Error as e: 
      error = {'message': e._message or 'Unknown error'} 
      return Response(error,status=status.HTTP_400_BAD_REQUEST) 

답변

3

serializers.py

class UserSerializer(serializers.ModelSerializer): 
"""Serializer to serialize user model object""" 

    class Meta: 
     model = User 
     fields = ('id', 'username', 'password', 'first_name', 'last_name') 
     extra_kwargs = {'password': {'write_only': True}} 

    def create(self, validated_data): 
     """create a new user""" 

     firstname = validated_data['first_name'] 
     lastname = validated_data['last_name'] 
     fullname = str(firstname) +" "+ str(lastname) 
     email = validated_data['username'].lower() 

     try: 
      customer = User.objects.create(
       name=fullname, 
       email=email) 
      return customer 

     except Exception as e: 
      error = {'message': ",".join(e.args) if len(e.args) > 0 else 'Unknown Error'} 
      raise serializers.ValidationError(error) 
+0

* Thx 많이 내 대답을 해결 :) * –

+0

고마워요. @oramic –

0

그래서이 표현에서 사용자 표현 (JSON 응답 모양)을 변경하려고합니다. 이렇게하려면 당신은 시리얼의 .to_representation(self, obj) 방법을 변경해야

class UserSerializer(serializers.ModelSerializer): 
    """Serializer to serialize user model object""" 
    class Meta: 
     model = User 
     fields = ('id', 'username', 'password', 'first_name', 'last_name',) 
     write_only_fields = ('id', 'password',) 

    def to_representation(self, obj): 
     return { 
      'firstname': obj.first_name, 
      'lastname': obj.last_name, 
      'fullname': obj.first_name+' '+obj.last_name, 
      'email': obj.username.lower() 
     } 

이 의미한다을 그 요청은 사용자가 오직 예를 들어, JSON에서 그 4 개 필드를 볼이 시리얼 라이저를 사용하는 될 때마다

{ 
    "firstname":"Salman", 
    "lastname": "Ahmed", 
    "fullname": "Salman Ahmed", 
    "email": "[email protected]" 
} 

자세한 내용은 is hidden in their docs here입니다. 응답 @Splatmistro에 대한

+0

감사합니다. 난 그냥 사용자 정의 응답으로 내 오류를 보여줍니다. 언제든지 나는 그 오류를 보여줍니다 사용자 생성하는 동안 오류가 발생합니다. –

+0

오, 나는 당신의 문제를 오해했습니다! – Splatmistro