aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/serializers.py
diff options
context:
space:
mode:
authorGravatar RohanJnr <[email protected]>2020-10-09 00:02:24 +0530
committerGravatar RohanJnr <[email protected]>2020-10-09 00:02:24 +0530
commit1bef883886f3335a441b496b35df9e25b3ba0e91 (patch)
tree6a956f0eec1c8252d3b5e05139563249295da321 /pydis_site/apps/api/serializers.py
parentConvert ValidationError response value to list from string (diff)
Move Validation checks to serializer from viewset
Diffstat (limited to 'pydis_site/apps/api/serializers.py')
-rw-r--r--pydis_site/apps/api/serializers.py23
1 files changed, 21 insertions, 2 deletions
diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py
index ee950cf4..25c5c82e 100644
--- a/pydis_site/apps/api/serializers.py
+++ b/pydis_site/apps/api/serializers.py
@@ -263,13 +263,32 @@ class UserListSerializer(ListSerializer):
User.objects.bulk_create(new_users, ignore_conflicts=True)
return []
- def update(self, instance: QuerySet, validated_data: list) -> list:
+ def update(self, queryset: QuerySet, validated_data: list) -> list:
"""
Override update method to support bulk updates.
ref:https://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-update
"""
- instance_mapping = {user.id: user for user in instance}
+ object_ids = set()
+
+ for data in validated_data:
+ try:
+ if data["id"] in object_ids:
+ # If request data contains users with same ID.
+ raise ValidationError(
+ {"id": [f"User with ID {data['id']} given multiple times."]}
+ )
+ except KeyError:
+ # If user ID not provided in request body.
+ raise ValidationError(
+ {"id": ["This field is required."]}
+ )
+ object_ids.add(data["id"])
+
+ # filter queryset
+ filtered_instances = queryset.filter(id__in=object_ids)
+
+ instance_mapping = {user.id: user for user in filtered_instances}
updated = []
fields_to_update = set()