From ad351f0c548bae6659b7d0412ad06a01a76131db Mon Sep 17 00:00:00 2001 From: Kevin Meinhardt Date: Fri, 20 Sep 2024 10:50:55 +0200 Subject: [PATCH] Fix serialization typing for CollectionAbuseReportSerializer collection field --- src/olympia/abuse/serializers.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/olympia/abuse/serializers.py b/src/olympia/abuse/serializers.py index 97093c212e27..e5cebd914f87 100644 --- a/src/olympia/abuse/serializers.py +++ b/src/olympia/abuse/serializers.py @@ -1,4 +1,5 @@ from typing import TypedDict + from django.http import Http404 from django.utils.translation import gettext_lazy as _ @@ -11,6 +12,7 @@ from olympia.api.exceptions import UnavailableForLegalReasons from olympia.api.fields import ReverseChoiceField from olympia.api.serializers import AMOModelSerializer +from olympia.bandwagon.serializers import CollectionSerializer from olympia.constants.abuse import ( ILLEGAL_CATEGORIES, ILLEGAL_SUBCATEGORIES, @@ -357,21 +359,22 @@ def get_rating(self, obj): class CollectionAbuseReportSerializer(BaseAbuseReportSerializer): - collection = serializers.SerializerMethodField() + class CollectionIdSerializer(CollectionSerializer): + class Meta(CollectionSerializer.Meta): + fields = ('id',) - class Meta: - model = AbuseReport + collection = CollectionIdSerializer(read_only=True) + + class Meta(BaseAbuseReportSerializer.Meta): fields = BaseAbuseReportSerializer.Meta.fields + ('collection',) def to_internal_value(self, data): self.validate_target(data, 'collection') view = self.context.get('view') - output = {'collection': view.get_target_object()} + collection = view.get_target_object() # Pop 'collection' before passing it to super(), we already have the # output value and did the validation above. - data.pop('collection') - output.update(super().to_internal_value(data)) - return output - - def get_collection(self, obj): - return {'id': obj.collection.pk} + data.pop('collection', None) + validated_data = super().to_internal_value(data) + validated_data['collection'] = collection + return validated_data