【问题标题】:TypeError : count() takes at least 1 argument (0 given)TypeError : count() 至少需要 1 个参数(给定 0)
【发布时间】:2020-08-05 09:38:58
【问题描述】:

我收到类型错误: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()

【问题讨论】:

  • “主题”是什么类型?
  • 主题是列表类型的对象吗?在这种情况下,您需要再添加一个参数作为您需要计算的字符。

标签: python django list django-rest-framework


【解决方案1】:

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

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

return len(obj.subject)

【讨论】:

    【解决方案2】:

    您的实现没有意义。我认为您正在尝试计算所有 Comments 对象,但在这里您正在尝试计算主题,可能是字符串或列表。在它们上,count 的工作方式如下:

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

    现在,为了解决您的问题,我们需要了解您想要在这里实现的目标。如果您想获取特定帖子的 cmets 计数,则可以这样尝试:

    如果你有这样的模型:

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

    那么你可以采取这种方法:

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

    这是来自 Django 查询集的 count() 函数。而obj.post.comments_set 将返回一个查询集(用于具有反向关系)。如果你定义了related_name="post_comments"(docs),那么它将变成obj.post.post_comments.count()

    【讨论】:

      【解决方案3】:

      您可以查看功能说明here

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

      另外,如果你给出一个你得到错误的示例程序会更好。

      【讨论】:

        【解决方案4】:

        count 需要一个参数。它返回列表中特定项目的实例数。

            l=[1,2,5,4,5,6,7,10]
            l.count(5)
            2
        

        2 这里是列表中5s 的数量。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多