Drf

DjangodrfフレームワークでのserializerMethodFieldの役割



Role Serializermethodfield Django Drf Framework



開発時に、シリアライザーを使用して戻り値をシリアル化すると、返されるもののほとんどはデータフレーム内のテーブルのフィールドですが、他のいくつかのテーブル(関連するテーブル)のフィールドデータも返したいと考えています。 、またはフィールドデータ(真のフレア)に基づいて他のデータを返すために、現時点で何をすべきか、drfフレームワークは私たちがそれについて考えるのを助けました、彼はserializerMethodFieldです、それを行う方法、私たちはコードを見ることができます

class MessageListSerializer(serializers.ModelSerializer): id = serializers.IntegerField(read_only=True) title = serializers.CharField(read_only=True) created_at = serializers.DateTimeField(read_only=True) is_read = serializers.SerializerMethodField() def get_is_read(self, instance): # return 'read' if instance ['is_read'] else 'unread' return 'Have read' if instance.is_read else 'unread' class Meta: model = Message # fields = ('id', 'title', 'created_at', 'is_read') fields = ('id', 'title', 'created_at', 'is_read')`` ```python

標準の表現はget_nameです。インスタンスは、現時点でモデル内のオブジェクトを意味します。このオブジェクトに基づいて、関連付けられたデータベース内のフィールドのデータをクエリできます。



もう一つの例:

class RoleModelSerializer(serializers.ModelSerializer): '' 'Character Model Serializer' '' ' user_count = serializers.SerializerMethodField(label='amount of users') # Added the number of users with no field in the database class Meta: model = Role fields = ['id', 'name', 'desc', 'user_count'] def get_user_count(self, obj): ''' Returns the number of users in the current role Fixed wording, obj represents Role instance object, and the model class is configured with a back reference user to represent the current role user ''' number = obj.user.count() return number``