Сначала вы должны знать, как работает count . Метод Count будет подсчитывать для идентичных строк . Он использует все поля , доступные в объекте, чтобы проверить, совпадает ли он с полями других строк или нет. Таким образом, в текущей ситуации count_values приводит к 1 , потому что Count использует все поля, кроме id , для поиска похожих строк. Подсчет включает в себя поля пользователя, значения, текста, что-то1, что-то2 для проверки на сходство.
Для подсчета строк с похожими полями необходимо использовать только поле пользователя, значения и текстовое поле
Запрос:
recs = MyTableWithValues.objects
.values('user','values','text')
.annotate(max_id=Max('id'),count_id=Count('user__id'))
.annotate(count_values=Count('values'))
Будет возвращен список словаря
print(recs)
Вывод:
<QuerySet[{'user':1,'values':1,'text':'asdasdasdasd','max_id':3,'count_id':2,'count_values':2},{'user':2,'values':2,'text':'QWQWQWQWQWQW','max_id':2,'count_id':1,'count_values':1}]
с использованием этого queryset Вы можете проверить, сколько раз строка содержит пользователя, значения и текстовое поле с одинаковыми значениями