вопрос банальный но что то я не могу победить его, есть модель пользователя и у него аватар, фронт уже написан поэтому там ничего не меняют, задача в сериализаторе при выдаче сущьности подставить url картинки-заглушки если нет аватарки!
class CustomUserModelSerializer(serializers.ModelSerializer):
"""give all users"""
status = serializers.SerializerMethodField()
class Meta:
model= CustomUser
fields = ('id','email','name','status', 'avatar')
def get_status(self, obj):
if obj.is_active == True:
status = 'active'
else:
status = 'inactive'
return status
class CustomUserListAPIView(generics.ListAPIView):
"""Выдаёт всех пользователей"""
queryset = CustomUser.objects.all()
serializer_class = CustomUserModelSerializer
# Задает путь к файлу аватарки
def upload_path_handler(instance, filename):
return "images/{user}/ava_{file}".format(user=instance.email, file=filename)
class CustomUser(AbstractBaseUser, PermissionsMixin):
""""USERNAME --- EMAIL полностью настраиваемая модель пользователя"""
email = models.EmailField(_('email address'), unique=True)
name = models.CharField (verbose_name='ФИО', max_length=100, blank=False, null=False)
is_staff = models.BooleanField(default=False, verbose_name='Персонал')
is_active = models.BooleanField(default=False, verbose_name='Регистрация подтверждена')
date_joined = models.DateTimeField(default=timezone.now, verbose_name='Дата регистрации' )
phone_regex = RegexValidator(regex=r'^((\+7)+([0-9]){10})$',
message="ФОРМАТ дожен быть: +79998885555")
phone = models.CharField(validators=[phone_regex], verbose_name='Телефон',
max_length=12, blank=False, null=False)
avatar = models.ImageField(blank=True, upload_to=upload_path_handler,
verbose_name = 'Аватар')
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email
class Meta:
verbose_name = 'Пользователь'
verbose_name_plural = 'Пользователи'
def save(self):
"""при сохранении уменьшает аватар"""
#Opening the uploaded image
im = Image.open(self.avatar)
output = BytesIO()
#Resize/modify the image
im = im.resize( (200,200) )
#after modifications, save it to the output
im.save(output, format='JPEG', quality=100)
output.seek(0)
#change the imagefield value to be the newley modifed image value
self.avatar = InMemoryUploadedFile(output,'ImageField', "%s.jpg" %self.avatar.name.split('.')[0], 'image/jpeg', sys.getsizeof(output), None)
super(CustomUser,self).save()