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.
 
 
 
 
 
 

138 lines
3.6 KiB

from phonenumber_field.serializerfields import PhoneNumberField
from rest_framework import serializers
from drf_dynamic_fields import DynamicFieldsMixin
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(DynamicFieldsMixin, 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',
'review_url',
)
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)