【问题标题】:Django Count with filter带过滤器的 Django 计数
【发布时间】:2021-03-11 21:59:53
【问题描述】:

我试图用过滤器计数,它没有显示任何错误,但没有显示计数

我已经尝试了所有我所知道的并搜索了所有没有找到任何解决方案的地方:

class UsersAnswersSerializer(serializers.ModelSerializer):

 Answers = serializers.SerializerMethodField('get_answers')

 def get_answers(self, obj):
    queryset = AnswersModel.objects.filter(Question=obj.Answer.Question.id)\
        .annotate(answersCount=Count('UsersAnswer', distinct=True))

    serializer = Answersserializer(instance=queryset, many=True)

    return serializer.data
 
 class Meta:
     model = UsersAnswerModel
     fields = ['Answer', 'APNSDevice' ,'RegistrationID','Answers']

这是我的模型:

class AnswersModel(models.Model):
      Question = models.ForeignKey(QuestionsModel, related_name='QuestionAnswer', on_delete=models.CASCADE)
      Answer = models.CharField(max_length=200)

class UsersAnswerModel(models.Model):
     Answer = models.ForeignKey(AnswersModel, related_name='UsersAnswer', on_delete=models.CASCADE)
     RegistrationID = models.CharField(max_length=200)
     APNSDevice = models.CharField(max_length=200,default='no name')

class QuestionsModel(models.Model):
      created = models.DateTimeField(auto_now_add=True)
      Question = models.CharField(max_length=200)
      

得到的是什么

{
"Answer": 12,
"APNSDevice": "byname",
"RegistrationID": "asdasdasdasdasdasdasdasdsa",
"Answers": [
    {
        "id": 10,
        "Question": 4,
        "Answer": "Answer 1",
        "UsersAnswer": [
            "gfgdgdfgdf",
            "c748dfd8aa7dd73a6c1ef17676aa7667161ff7e0f8e2ef21ef17e964a26150e4"
        ]
    },
    {
        "id": 11,
        "Question": 4,
        "Answer": "Answer 2",
        "UsersAnswer": [
            "sfgdfgdf",
            "c748dfd8aa7dd73a6c1ef17676aa7667161ff7e0f8e2ef21ef17e964a26150e4",
            "c748dfd8aa7dd73a6c1ef17676aa7667161ff7e0f8e2ef21ef17e964a26150e4",
            "c748dfd8aa7dd73a6c1ef17676aa7667161ff7e0f8e2ef21ef17e964a26150e4"
        ]
    }

我需要让“UsersAnswer”显示其数组的计数

【问题讨论】:

    标签: django django-filter django-aggregation


    【解决方案1】:

    我认为你想做的是聚合和计数。

    用聚合替换注释

    【讨论】:

    • 用聚合替换时出现此错误。尝试在序列化程序 Answersserializer 上获取字段 Question 的值时出现 AttributeError。序列化程序字段可能命名不正确,并且与 str 实例上的任何属性或键都不匹配。原始异常文本是:“str”对象没有属性“问题”。
    • 这似乎是序列化程序的错误。我不能说太多,但如果你想返回一个计数,你不需要通过查询集进行注释。只需汇总和计数。
    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 2018-07-10
    • 2017-09-08
    • 2020-05-26
    相关资源
    最近更新 更多