Nalutas: django serializer method field read write

Ang pangunahing problema sa field ng serializer na read write ay madali itong maabuso. Halimbawa, kung mayroon kang modelong nag-iimbak ng data ng user sa isang field na tinatawag na “pangalan”, madali kang makakagawa ng paraan ng serializer na nagbabasa ng pangalan ng user mula sa database at isinusulat ito sa field na “pangalan” ng modelo. Papayagan ka nitong ma-access ang pangalan ng user mula sa anumang view o template sa iyong application, nang hindi kinakailangang mag-query sa database sa bawat oras.

Sinusubukan kong lumikha ng isang field ng pamamaraan sa aking Django serializer na magbabasa at magsusulat ng data. Ang field ay tinatawag na "status" at gusto kong bumalik itong "aktibo" kung ang user ay may aktibong subscription, at "hindi aktibo" kung wala sila.
Narito ang aking code:
class UserSerializer(serializers.ModelSerializer):

status = serializers.SerializerMethodField()

def get_status(self, obj):
if obj.subscription_set.filter(is_active=True).exists():
return 'active'
else:
return 'inactive'

class Meta:
model = UserProfile
fields = ('username', 'email', 'first_name', 'last_name', 'status')

def update(self, instance, validated_data):

instance.username = validated_data['username']
instance.email = validated_data['email']

if validated_data['password']: # password can be empty string when updating user profile without changing password (e-mail only) - https://github.com/tomchristie/django-rest-framework/issues/3086#issuecomment-290987912 - thanks @encode! :) # noqa E501 (line too long) pylint: disable=line-too-long # noqa E501 (line too long) pylint: disable=line-too-long # noqa E501 (line too long) pylint: disable=line-too-long # noqa E501 (line too long) pylint: disable=line-too-long # noqa E501 (line too long) pylint: disable=line-too-long # noqa E501 (line too long) pylint: disable=C0301 # noqa E501 (line too long) pylint: disable=C0301 # noqa E501 (line too long) pylint: disable=C0301 # noqa E501 (l... instance.set_password(validated_data['password'])

instance.save()

return instance

Ang error na nakukuha ko ay ito kapag sinubukan kong i-save ang data gamit ang isang kahilingan sa PUT sa Postman o Insomnia REST client - "detail": "Method "PUT"" not allowed."" Nangyayari ito kahit na idinagdag ko ang update() paraan sa aking code sa itaas tulad ng iminungkahi ng iba pang mga SO post sa mga katulad na paksa tulad nito dito Django Rest Framework Serializer Method Field Update Issue . Anumang tulong ay pinahahalagahan! Salamat! 🙂

Kaugnay na mga post:

Mag-iwan ng komento