web-dev-qa-db-ja.com

Django Serializer Method Field

このための適切なGoogle検索を見つけることができないようですので、ここに行きます:

シリアライザーにフィールドがあります:

likescount = serializers.IntegerField(source='post.count', read_only=True)

これは、すべての関連フィールド「post」をカウントします。

次に、メソッドの一部としてそのフィールドを使用します。

def popularity(self, obj):
        like = self.likescount
            time = datetime.datetime.now()
            return like/time

これは可能ですか?

26
John D

post.countは投稿のいいね!の数を測定するために使用されており、実際に人気の方法で整数をタイムスタンプで割るつもりはないので、これを試してください:

SerializerMethodField を使用します

likescount = serializers.SerializerMethodField('get_popularity')

def popularity(self, obj):
    likes = obj.post.count
    time = #hours since created
    return likes / time if time > 0 else likes

ただし、これをモデルのプロパティにすることをお勧めします

あなたのモデルで:

@property
def popularity(self):
    likes = self.post.count
    time = #hours since created
    return likes / time if time > 0 else likes

次に、汎用の Field を使用して、シリアライザーでそれを参照します。

class ListingSerializer(serializers.ModelSerializer):
    ...
    popularity = serializers.Field(source='popularity')
58
tomcounsell