Skip to content

Commit 9655d71

Browse files
authored
Merge pull request #25 from akirachix/feature/fixes
feat: Update user profile image functionality
2 parents 9d5b4bf + 7a29764 commit 9655d71

File tree

9 files changed

+69
-15
lines changed

9 files changed

+69
-15
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ venv/
44
env/
55
__pycache__/
66
*.pyc
7-
staticfiles/
7+
staticfiles/
8+
media/profile-picture/

api/serializers.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ def create(self, validated_data):
6969
)
7070
return user
7171

72-
7372
def update(self, instance, validated_data):
7473
password = validated_data.pop("password", None)
7574
if password:
@@ -78,13 +77,12 @@ def update(self, instance, validated_data):
7877
device_id_str = validated_data.pop('device_id', None)
7978
if device_id_str:
8079
instance.device_id = MCU.objects.get(device_id=device_id_str)
81-
elif device_id_str is not None:
82-
instance.device_id = None
83-
elif 'device_id' not in self.initial_data:
84-
pass
85-
else:
80+
elif 'device_id' in validated_data and validated_data['device_id'] is None:
8681
instance.device_id = None
87-
82+
83+
if 'image' in validated_data:
84+
instance.image = validated_data['image']
85+
8886
for attr, value in validated_data.items():
8987
setattr(instance, attr, value)
9088

api/urls.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,5 @@
2626
path('schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
2727
path('schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'),
2828

29-
30-
3129
]
3230

api/views.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from rest_framework.views import APIView
22
from rest_framework import viewsets
33
from rest_framework.response import Response
4-
from rest_framework import generics, status
4+
from rest_framework import generics, status, parsers
55
from rest_framework.reverse import reverse
66
from rest_framework.permissions import AllowAny
77
from rest_framework_simplejwt.tokens import AccessToken
@@ -26,8 +26,7 @@ class UserViewSet(viewsets.ModelViewSet):
2626
queryset = User.objects.all()
2727
serializer_class = UserSerializer
2828
permission_classes = [AllowAny]
29-
30-
29+
parser_classes = (parsers.MultiPartParser, parsers.FormParser, parsers.JSONParser)
3130
class ThresholdViewSet(viewsets.ViewSet):
3231
def list(self, request):
3332
mcus = MCU.objects.all()
@@ -76,6 +75,7 @@ class UserAPIView(generics.GenericAPIView):
7675
queryset = User.objects.all()
7776
serializer_class = UserSerializer
7877
permission_classes = [AllowAny]
78+
parser_classes = (parsers.MultiPartParser, parsers.FormParser, parsers.JSONParser)
7979
def get(self, request, *args, **kwargs):
8080
users = self.get_queryset()
8181
serializer = self.get_serializer(users, many=True)
@@ -90,6 +90,7 @@ class UserDetailView(generics.RetrieveUpdateDestroyAPIView):
9090
queryset = User.objects.all()
9191
serializer_class = UserSerializer
9292
permission_classes = [AllowAny]
93+
parser_classes = (parsers.MultiPartParser, parsers.FormParser, parsers.JSONParser)
9394

9495
class SetPasswordView(generics.GenericAPIView):
9596
serializer_class = SetPasswordSerializer

kukukonnect/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
SECRET_KEY = os.getenv('SECRET_KEY')
2525
# SECURITY WARNING: don't run with debug turned on in production!
26-
DEBUG =False
26+
DEBUG=True
2727
ALLOWED_HOSTS = ["*"]
2828
# Application definition
2929
INSTALLED_APPS = [
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 4.2.24 on 2025-09-22 19:04
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
("users", "0001_initial"),
9+
]
10+
11+
operations = [
12+
migrations.AlterField(
13+
model_name="user",
14+
name="image",
15+
field=models.URLField(blank=True, null=True, verbose_name="Profile URL"),
16+
),
17+
]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Generated by Django 4.2.24 on 2025-09-23 06:41
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
("users", "0002_alter_user_image"),
9+
]
10+
11+
operations = [
12+
migrations.AlterField(
13+
model_name="user",
14+
name="image",
15+
field=models.ImageField(
16+
blank=True,
17+
null=True,
18+
upload_to="profile_images/",
19+
verbose_name="Profile Image",
20+
),
21+
),
22+
]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 4.2.24 on 2025-09-23 07:44
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
("users", "0003_alter_user_image"),
9+
]
10+
11+
operations = [
12+
migrations.AlterField(
13+
model_name="user",
14+
name="image",
15+
field=models.ImageField(blank=True, null=True, upload_to="profile_images/"),
16+
),
17+
]

users/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class User(AbstractBaseUser):
3232
blank=True,
3333
verbose_name=_("Device ID")
3434
)
35-
image = models.ImageField(_("Profile Image"), upload_to='profile_images/', blank=True, null=True)
35+
image = models.ImageField(upload_to='profile_images/', blank=True, null=True)
3636
user_type = models.CharField(
3737
_("User Type"),
3838
max_length=20,

0 commit comments

Comments
 (0)