Django rest framework 如何在DRF序列化程序的GenericRelation字段中返回链接对象的计数?

Django rest framework 如何在DRF序列化程序的GenericRelation字段中返回链接对象的计数?,django-rest-framework,Django Rest Framework,在Django Rest框架中有很多问题,但是我有一个用例,我只想返回GenericRelation字段中的对象计数,而不是序列化它们。我能找到的文档和现有问题不包括这一点 我认为这可能很简单,只需在自定义序列化程序中返回len(value),但会产生以下抛出: object of type 'GenericRelatedObjectManager' has no len() 我失败的尝试: class ObjectCountSerializer(serializers.RelatedFiel

在Django Rest框架中有很多问题,但是我有一个用例,我只想返回GenericRelation字段中的对象计数,而不是序列化它们。我能找到的文档和现有问题不包括这一点

我认为这可能很简单,只需在自定义序列化程序中返回
len(value)
,但会产生以下抛出:

object of type 'GenericRelatedObjectManager' has no len()
我失败的尝试:

class ObjectCountSerializer(serializers.RelatedField):
    """
    Return the count of related objects.
    """

    def to_representation(self, value):
        return len(value)

class PostListSerializer(serializers.ModelSerializer):
    """
    Main serializers for the writings module
    """
    author = MemberListSerializer(many=False, read_only=True)
    comments = ObjectCountSerializer(read_only=True)

    class Meta:
        model = Post
        fields = (
            'id',
            'slug',
            'url',
            'title',
            'description',
            'created',
            'edited',
            'author',
            'comments'
        )
        lookup_field = 'slug'
        extra_kwargs = {
            'url': {'lookup_field': 'slug'}
        }

如何简单地返回关系中对象的计数?

我想说一个
SerializerMethodField
可以解决这个问题,例如

class PostListSerializer(serializers.ModelSerializer):
    """
    Main serializers for the writings module
    """
    author = MemberListSerializer(many=False, read_only=True)
    comments = serializers.SerializerMethodField()

    def get_comments(self, instance):
        return instance.comments.count()

    class Meta:
        model = Post
        fields = (
            'id',
            'slug',
            'url',
            'title',
            'description',
            'created',
            'edited',
            'author',
            'comments'
        )
        lookup_field = 'slug'
        extra_kwargs = {
            'url': {'lookup_field': 'slug'}
        }

SerializerMethodField
是一个只读字段,返回方法的结果,通常命名为
get\ucode>

我认为
SerializerMethodField
可以解决这个问题,例如

class PostListSerializer(serializers.ModelSerializer):
    """
    Main serializers for the writings module
    """
    author = MemberListSerializer(many=False, read_only=True)
    comments = serializers.SerializerMethodField()

    def get_comments(self, instance):
        return instance.comments.count()

    class Meta:
        model = Post
        fields = (
            'id',
            'slug',
            'url',
            'title',
            'description',
            'created',
            'edited',
            'author',
            'comments'
        )
        lookup_field = 'slug'
        extra_kwargs = {
            'url': {'lookup_field': 'slug'}
        }

SerializerMethodField
是一个只读字段,返回方法的结果,通常名为
get\ucode>

Bingo bango bongo,就是这样。干杯,伙计,谢谢你的帮助。哈哈,听起来很像澳大利亚人。很高兴它帮了忙:)宾果邦戈邦戈,明白了。干杯,伙计,谢谢你的帮助。哈哈,听起来很像澳大利亚人。很高兴这有帮助:)