diff --git a/apps/account/admin.py b/apps/account/admin.py
index dc88c34b..8429952f 100644
--- a/apps/account/admin.py
+++ b/apps/account/admin.py
@@ -15,11 +15,13 @@ class UserAdmin(BaseUserAdmin):
list_filter = ('is_active', 'is_staff', 'is_superuser', 'email_confirmed',
'groups',)
search_fields = ('email', 'first_name', 'last_name')
- readonly_fields = ('last_login', 'date_joined',)
+ readonly_fields = ('last_login', 'date_joined', 'image_preview', 'cropped_image_preview')
fieldsets = (
(None, {'fields': ('email', 'password',)}),
(_('Personal info'), {
- 'fields': ('username', 'first_name', 'last_name', 'image')}),
+ 'fields': ('username', 'first_name', 'last_name',
+ 'image_url', 'image_preview',
+ 'cropped_image_url', 'cropped_image_preview',)}),
(_('Subscription'), {
'fields': (
'newsletter',
@@ -46,3 +48,15 @@ class UserAdmin(BaseUserAdmin):
return obj.get_short_name()
short_name.short_description = _('Name')
+
+ def image_preview(self, obj):
+ """Get user image preview"""
+ return obj.image_tag
+
+ image_preview.short_description = 'Image preview'
+
+ def cropped_image_preview(self, obj):
+ """Get user cropped image preview"""
+ return obj.cropped_image_tag
+
+ cropped_image_preview.short_description = 'Cropped image preview'
diff --git a/apps/account/migrations/0007_auto_20190912_1323.py b/apps/account/migrations/0007_auto_20190912_1323.py
new file mode 100644
index 00000000..3fe08c7b
--- /dev/null
+++ b/apps/account/migrations/0007_auto_20190912_1323.py
@@ -0,0 +1,21 @@
+# Generated by Django 2.2.4 on 2019-09-12 13:23
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('account', '0006_delete_resetpasswordtoken'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='user',
+ name='cropped_image',
+ ),
+ migrations.RemoveField(
+ model_name='user',
+ name='image',
+ ),
+ ]
diff --git a/apps/account/migrations/0008_auto_20190912_1325.py b/apps/account/migrations/0008_auto_20190912_1325.py
new file mode 100644
index 00000000..b0a09ad2
--- /dev/null
+++ b/apps/account/migrations/0008_auto_20190912_1325.py
@@ -0,0 +1,23 @@
+# Generated by Django 2.2.4 on 2019-09-12 13:25
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('account', '0007_auto_20190912_1323'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='user',
+ name='cropped_image_url',
+ field=models.URLField(blank=True, default=None, null=True, verbose_name='Cropped image URL path'),
+ ),
+ migrations.AddField(
+ model_name='user',
+ name='image_url',
+ field=models.URLField(blank=True, default=None, null=True, verbose_name='Image URL path'),
+ ),
+ ]
diff --git a/apps/account/models.py b/apps/account/models.py
index ca5a4b96..81ade4fc 100644
--- a/apps/account/models.py
+++ b/apps/account/models.py
@@ -7,13 +7,12 @@ from django.db import models
from django.template.loader import render_to_string
from django.utils import timezone
from django.utils.encoding import force_bytes
+from django.utils.html import mark_safe
from django.utils.http import urlsafe_base64_encode
from django.utils.translation import ugettext_lazy as _
-from easy_thumbnails.fields import ThumbnailerImageField
from rest_framework.authtoken.models import Token
from authorization.models import Application
-from utils.methods import image_path
from utils.models import GMTokenGenerator
from utils.models import ImageMixin, ProjectBaseMixin, PlatformMixin
from utils.tokens import GMRefreshToken
@@ -53,11 +52,12 @@ class UserQuerySet(models.QuerySet):
oauth2_provider_refreshtoken__expires__gt=timezone.now())
-class User(ImageMixin, AbstractUser):
+class User(AbstractUser):
"""Base user model."""
- cropped_image = ThumbnailerImageField(upload_to=image_path,
- blank=True, null=True, default=None,
- verbose_name=_('Crop image'))
+ image_url = models.URLField(verbose_name=_('Image URL path'),
+ blank=True, null=True, default=None)
+ cropped_image_url = models.URLField(verbose_name=_('Cropped image URL path'),
+ blank=True, null=True, default=None)
email = models.EmailField(_('email address'), blank=True,
null=True, default=None)
email_confirmed = models.BooleanField(_('email status'), default=False)
@@ -161,6 +161,14 @@ class User(ImageMixin, AbstractUser):
'uidb64': self.get_user_uidb64,
'site_name': settings.SITE_NAME}
+ @property
+ def image_tag(self):
+ return mark_safe(f'
')
+
+ @property
+ def cropped_image_tag(self):
+ return mark_safe(f'
')
+
def reset_password_template(self, country_code):
"""Get reset password template"""
context = {'token': self.reset_password_token,
diff --git a/apps/account/serializers/common.py b/apps/account/serializers/common.py
index e6599f96..0c72d036 100644
--- a/apps/account/serializers/common.py
+++ b/apps/account/serializers/common.py
@@ -24,8 +24,8 @@ class UserSerializer(serializers.ModelSerializer):
required=False)
first_name = serializers.CharField(required=False, write_only=True)
last_name = serializers.CharField(required=False, write_only=True)
- image = serializers.ImageField(required=False)
- cropped_image = serializers.ImageField(required=False)
+ image_url = serializers.URLField(required=False)
+ cropped_image_url = serializers.URLField(required=False)
email = serializers.EmailField(
validators=(rest_validators.UniqueValidator(queryset=models.User.objects.all()),),
required=False)
@@ -38,8 +38,8 @@ class UserSerializer(serializers.ModelSerializer):
'first_name',
'last_name',
'fullname',
- 'cropped_image',
- 'image',
+ 'cropped_image_url',
+ 'image_url',
'email',
'email_confirmed',
'newsletter',
diff --git a/apps/comment/serializers/common.py b/apps/comment/serializers/common.py
index 3598be4c..8175df7f 100644
--- a/apps/comment/serializers/common.py
+++ b/apps/comment/serializers/common.py
@@ -9,7 +9,8 @@ class CommentSerializer(serializers.ModelSerializer):
nickname = serializers.CharField(read_only=True,
source='user.username')
is_mine = serializers.BooleanField(read_only=True)
- profile_pic = serializers.SerializerMethodField()
+ profile_pic = serializers.URLField(read_only=True,
+ source='user.cropped_image_url')
class Meta:
"""Serializer for model Comment"""
@@ -24,7 +25,3 @@ class CommentSerializer(serializers.ModelSerializer):
'nickname',
'profile_pic'
]
-
- def get_profile_pic(self, obj):
- """Get profile picture URL"""
- return obj.user.get_full_image_url(request=self.context.get('request'))
diff --git a/apps/gallery/views.py b/apps/gallery/views.py
index a3b61727..109a01ef 100644
--- a/apps/gallery/views.py
+++ b/apps/gallery/views.py
@@ -6,7 +6,7 @@ from . import models, serializers
class ImageUploadView(generics.CreateAPIView):
"""Upload image to gallery"""
- permission_classes = (IsAuthenticatedAndTokenIsValid, )
model = models.Image
queryset = models.Image.objects.all()
serializer_class = serializers.ImageSerializer
+ permission_classes = (IsAuthenticatedAndTokenIsValid, )