You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
3.5 KiB
137 lines
3.5 KiB
from phonenumber_field.serializerfields import PhoneNumberField
|
|
from rest_framework import serializers
|
|
|
|
from django.contrib.auth import get_user_model
|
|
|
|
from api.v1.serializers.content import GallerySerializer, GalleryImageSerializer, GalleryImageCreateSerializer
|
|
from . import Base64ImageField
|
|
from apps.user.models import AuthorRequest
|
|
from .mixins import DispatchGalleryMixin
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
class UserSerializer(serializers.ModelSerializer):
|
|
phone = PhoneNumberField(required=False, allow_null=True, allow_blank=True)
|
|
|
|
class Meta:
|
|
model = User
|
|
fields = (
|
|
'id',
|
|
'username',
|
|
'email',
|
|
'phone',
|
|
'first_name',
|
|
'last_name',
|
|
'is_staff',
|
|
'is_active',
|
|
'date_joined',
|
|
'role',
|
|
'gender',
|
|
'country',
|
|
'city',
|
|
'about',
|
|
'instagram',
|
|
'instagram_hashtag',
|
|
'facebook',
|
|
'twitter',
|
|
'pinterest',
|
|
'youtube',
|
|
'vkontakte',
|
|
'fb_id',
|
|
'fb_data',
|
|
'is_email_proved',
|
|
'photo',
|
|
'balance',
|
|
'show_in_mainpage',
|
|
'trial_lesson',
|
|
)
|
|
|
|
read_only_fields = (
|
|
'id',
|
|
'username',
|
|
'photo',
|
|
'date_joined',
|
|
'is_staff',
|
|
'fb_id',
|
|
'fb_data',
|
|
'balance',
|
|
)
|
|
|
|
def create(self, validated_data):
|
|
username = validated_data.get('username', None)
|
|
if not username:
|
|
validated_data['username'] = validated_data['email']
|
|
instance = super().create(validated_data)
|
|
if not instance.password:
|
|
password = User.objects.make_random_password()
|
|
instance.set_password(password)
|
|
instance.save()
|
|
return instance
|
|
|
|
def validate_phone(self, value):
|
|
if not value and value is not None:
|
|
value = None
|
|
return value
|
|
|
|
|
|
class UserPhotoSerializer(serializers.Serializer):
|
|
photo = Base64ImageField(
|
|
required=False, allow_empty_file=True, allow_null=True
|
|
)
|
|
|
|
|
|
class AuthorRequestSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AuthorRequest
|
|
fields = (
|
|
'id',
|
|
'first_name',
|
|
'last_name',
|
|
'email',
|
|
'about',
|
|
'facebook',
|
|
'status',
|
|
'cause',
|
|
'accepted_send_at',
|
|
'declined_send_at',
|
|
'created_at',
|
|
'update_at',
|
|
)
|
|
|
|
read_only_fields = (
|
|
'id',
|
|
'accepted_send_at',
|
|
'declined_send_at',
|
|
'created_at',
|
|
'update_at',
|
|
)
|
|
|
|
|
|
class UserGallerySerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = User
|
|
fields = (
|
|
'gallery',
|
|
)
|
|
|
|
|
|
class UserGalleryUpdateSerializer(DispatchGalleryMixin, serializers.ModelSerializer):
|
|
images = serializers.ListField()
|
|
|
|
class Meta:
|
|
model = User
|
|
fields = (
|
|
'images',
|
|
)
|
|
|
|
def update(self, instance, validated_data):
|
|
images = validated_data.pop('images', {})
|
|
self.dispatch_gallery(instance, {
|
|
'id': instance.gallery_id,
|
|
'images': images,
|
|
})
|
|
return instance
|
|
|
|
def to_representation(self, instance):
|
|
return UserGallerySerializer(instance=instance, context=self.context).to_representation(instance)
|
|
|