Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from rest_framework import serializers
- from django.db import transaction
- from .models import Profile
- from django.contrib.auth.models import User
- from django.contrib.auth.hashers import make_password
- class UserSerializer(serializers.HyperlinkedModelSerializer):
- class Meta:
- model = User
- fields = ('email', 'password')
- extra_kwargs = {
- 'username': {'read_only': True},
- # 'password': {'write_only': True}
- }
- def validate_email(self, value):
- usr = User.objects.filter(email__icontains=value)
- if not value:
- raise serializers.ValidationError("Este campo não pode ser em branco.")
- if self.parent:
- if self.parent.instance:
- usr = usr.exclude(pk=self.parent.instance.user.id)
- if usr.exists():
- raise serializers.ValidationError("E-mail já está cadastrado")
- return value
- def validate_password(self, value):
- if not value:
- raise serializers.ValidationError("Este campo não pode ser em branco.")
- return value
- class ProfileSerializer(serializers.HyperlinkedModelSerializer):
- user = UserSerializer()
- class Meta:
- model = Profile
- fields = ('id', 'url', 'user', 'bio', 'location')
- @transaction.atomic
- def create(self, validated_data):
- track_data = validated_data.pop('user')
- if 'email' not in track_data:
- raise serializers.ValidationError({"user": {"email": ["Este campo precisa ser informado"]}})
- if 'password' not in track_data:
- raise serializers.ValidationError({"user": {"password": ["Este campo precisa ser informado"]}})
- track_data['username'] = track_data['email']
- user = User.objects.create(**track_data)
- user.set_password(track_data['password'])
- user.save()
- validated_data['user'] = user
- profile = super(ProfileSerializer, self).create(validated_data)
- return profile
- @transaction.atomic
- def update(self, instance, validated_data):
- track_data = validated_data.pop('user')
- profile = super(ProfileSerializer, self).update(instance, validated_data)
- user = UserSerializer(profile.user, track_data)
- if 'email' in track_data:
- track_data['username'] = track_data['email']
- if user.is_valid():
- User.objects.filter(pk=profile.user.id).update(**track_data)
- return profile
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement