TypeError: count () принимает как минимум 1 аргумент (задано 0) - PullRequest
0 голосов
/ 05 августа 2020

я получаю 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()

Ответы [ 4 ]

3 голосов
/ 05 августа 2020

Ваша реализация не имеет смысла. Я думаю, вы пытаетесь подсчитать все объекты Comments, но здесь вы пытаетесь подсчитать субъект, возможно, это строка или список. На них счетчик работает следующим образом:

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()

Это функция count() из набора запросов Django. И obj.post.comments_set вернет набор запросов (для наличия обратной связи). Если вы определили related_name="post_comments" ( docs ), тогда он станет obj.post.post_comments.count().

1 голос
/ 05 августа 2020

count требует аргумента. Он возвращает количество экземпляров определенного элемента в списке.

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

2 вот количество 5 s в списке.

1 голос
/ 05 августа 2020

Вы можете проверить описание функции здесь

Он подсчитывает вхождение объекта в список, поэтому вам нужно передать объект в качестве параметра функции count (), и примените это к списку.

0 голосов
/ 05 августа 2020

count() требует ровно один аргумент и возвращает количество экземпляров указанного аргумента в списке.

Если вы просто хотите подсчитать количество элементов в списке, используйте:

return len(obj.subject)
...