Django rest framework 如何在DRF序列化程序的GenericRelation字段中返回链接对象的计数?
在Django Rest框架中有很多问题,但是我有一个用例,我只想返回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
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,就是这样。干杯,伙计,谢谢你的帮助。哈哈,听起来很像澳大利亚人。很高兴它帮了忙:)宾果邦戈邦戈,明白了。干杯,伙计,谢谢你的帮助。哈哈,听起来很像澳大利亚人。很高兴这有帮助:)