aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site
diff options
context:
space:
mode:
authorGravatar RohanJnr <[email protected]>2020-10-05 18:18:09 +0530
committerGravatar RohanJnr <[email protected]>2020-10-05 18:18:09 +0530
commite7a61d0a2c96f48c7495f1f25e56384f6dbac645 (patch)
treec7f145edb284140f8f1034ded98efffadf0d0820 /pydis_site
parentMerge remote-tracking branch 'upstream/master' into user_endpoint (diff)
raise validation error for user not found in UserListSerializer
Diffstat (limited to 'pydis_site')
-rw-r--r--pydis_site/apps/api/serializers.py17
1 files changed, 11 insertions, 6 deletions
diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py
index 1f24d29f..a560d491 100644
--- a/pydis_site/apps/api/serializers.py
+++ b/pydis_site/apps/api/serializers.py
@@ -278,16 +278,20 @@ class UserListSerializer(ListSerializer):
ref:https://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-update
"""
instance_mapping = {user.id: user for user in instance}
- data_mapping = {item['id']: item for item in validated_data}
updated = []
fields_to_update = set()
- for user_id, data in data_mapping.items():
- for key in data:
+ for user_data in validated_data:
+ for key in user_data:
fields_to_update.add(key)
- user = instance_mapping.get(user_id)
- user.__dict__.update(data)
- updated.append(user)
+
+ try:
+ user = instance_mapping[user_data["id"]]
+ except KeyError:
+ raise ValidationError({"id": f"User with id {user_data['id']} not found."})
+
+ user.__dict__.update(user_data)
+ updated.append(user)
fields_to_update.remove("id")
User.objects.bulk_update(updated, fields_to_update)
@@ -297,6 +301,7 @@ class UserListSerializer(ListSerializer):
class UserSerializer(ModelSerializer):
"""A class providing (de-)serialization of `User` instances."""
+ # ID field must be explicitly set as the default id field is read-only.
id = IntegerField(min_value=0)
class Meta: