Glavni problem s poljem za čitanje i pisanje serijalizatora je taj što se može lako zloupotrijebiti. Na primjer, ako imate model koji pohranjuje korisničke podatke u polje pod nazivom "ime", možete jednostavno stvoriti metodu serijalizatora koja čita ime korisnika iz baze podataka i upisuje ga u polje "ime" modela. To bi vam omogućilo pristup korisničkom imenu iz bilo kojeg pogleda ili predloška u vašoj aplikaciji, bez potrebe da svaki put postavljate upit bazi podataka.
Pokušavam stvoriti polje metode u svom Django serijalizatoru koje će čitati i pisati podatke. Polje se zove "status" i želim da vrati "aktivno" ako korisnik ima aktivnu pretplatu i "neaktivno" ako nema.
Ovdje je moj kod:
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
Pogreška koju dobivam je ova kada pokušam spremiti podatke pomoću PUT zahtjeva u Postman ili Insomnia REST klijentu - "detail": "Method "PUT"" not allowed.""
To se događa iako sam dodao update()
metoda u mom gornjem kodu kao što je predloženo u drugim SO objavama o sličnim temama kao što je ova ovdje Django Rest Framework Serializer Method Field Update Issue. Svaka pomoć bi bila dobrodošla! Hvala! 🙂