TypeError:count()至少接受1个参数(给定0个)

2024-10-04 03:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我收到TypeError:count() takes at least 1 argument (0 given)

如果有人能找出我做错了什么,那就太好了。事先非常感谢你

class CommentsSerializer(serializers.ModelSerializer):
    comment_count = serializers.SerializerMethodField()
    class Meta:
        model = Comments
        fields = [
            "id", "title", "name", "subject", "comment_count",
        ]

    def get_comment_count(self, obj):
        return obj.subject.count()


Tags: objcountcommentargumentgivenatclasssubject
3条回答

您可以检查函数说明here

它统计对象在列表中的出现次数,因此需要将对象作为参数传递给count()函数,并将其应用于列表

此外,如果您提供一个示例程序,说明您得到了错误,则会更好

您的实现没有意义。我认为您正在尝试获取所有Comments对象的计数,但这里您正在尝试计数subject,可能是字符串或列表。在他们身上,count的工作原理如下:

IN  >> "aaaaa".count('a')
OUT >> 5
IN  >> [1,2,3,4].count(1)
OUT >> 1

现在,为了解决您的问题,我们需要了解您希望在这里实现什么。如果您想获得某个帖子的评论数,可以这样尝试:

如果您有这样的模型:

class Comments(models.Model):
    post = models.ForeignKey(Post)

然后您可以采用这种方法:

def get_comment_count(self, obj):
    return obj.post.comments_set.count()

这是Django queryset中的^{}函数。和obj.post.comments_set将返回一个queryset(用于具有反向关系)。如果您定义了related_name="post_comments"docs),那么它将变成obj.post.post_comments.count()

count()只需要一个参数,并返回列表中所提供参数的实例数

如果只想计算列表中的元素数,请使用:

return len(obj.subject)

相关问题 更多 >