2017-08-09 1 views
0

J'essaie de retourner otp à ma réponse avec d'autres données de sérialiseur. mais comme il n'est pas soumis à la demande, je suis incapable de comprendre comment le donner en réponse. Bureau du Procureur se stocké avec d'autres données dans le tableau utilisateur parfaitement mais je suis face à problème que dans ce retour en réponse .mon code est donnée ci-dessous:Retour d'un champ non serializer otp dans django

models.py

class User(AbstractUser): 
    phone_number = models.IntegerField(null=True) 
    otp = models.IntegerField(null=True) 

serializers.py

class UserSerializer(serializers.ModelSerializer): 
    password = serializers.CharField(write_only=True) 
    password_confirmation = serializers.CharField(read_only=True) 


    class Meta: 
    model = User 
    fields = ('username', 'password', 'password_confirmation', 'email', 'first_name', 'last_name', 'phone_number') 

    def create(self, validated_data): 
    password = validated_data.pop('password', None) 
    instance = self.Meta.model(**validated_data) 
    if password is not None: 
     instance.set_password(password) 
     instance.save() 
    instance.otp = randint(1, 98787) 
    instance.save() 
    return instance 

    def otp(self): 
    instance = self.Meta.model() 
    return instance.otp 

views.py

@api_view(['POST']) 
def user_signup(request): 
serializer = UserSerializer(data=request.data) 
if serializer.is_valid(): 
    serializer.save() 
    content = {'user': serializer.data, 'otp': UserSerializer.otp()} 
    return Response(content, status=status.HTTP_201_CREATED) 

Répondre

0

Depuis serializer.save() instance de retour vous pouvez faire ce qui suit:

if serializer.is_valid(): 
    instance = serializer.save() 
    content = {'user': serializer.data, 'otp': instance .otp} 

Alors def otp(self) dans UserSerializer n'est pas nécessaire.

+0

merci c'était exact –

+0

@RishabhPandey vous êtes les bienvenus! Vous pouvez accepter ma réponse si cela vous a été utile. – neverwalkaloner