【问题标题】:Modeling django model statistics建模 django 模型统计
【发布时间】:2012-11-15 05:22:52
【问题描述】:

我正在为 django 开发一个问卷模型,该模型应该可以由没有编程经验的人维护,所以我花了很多时间来制作模型以弥补小细节。现在我想释放潜力SQL 数据库查询,以便能够生成有关给出的响应和反馈的统计信息。

我的问题类型之一是 5 星评级,因此我希望能够收集有关该问题的统计数据,例如:

  • 问题 q 有多少个回答是 5 星(、4 星、3 星等)?
  • 平均评分反应是多少?

理想情况下,我希望将这些统计问题记录在模型中,并创建一个视图来显示所有询问的统计数据,并使整个事情保持程序化。

这应该是一个精心设计的模型或一组模型,比如反馈,还是已经有一些框架或模块可以为我处理这些情况?

我的问卷/models.py:

class QuestionType(models.Model):
    name = models.CharField(max_length=256, blank=True, default="")

class Question(models.Model):
    text = models.TextField()
    type = models.ForeignKey(QuestionType)

class Response(models.Model):
    question = models.ForeignKey(Question)
    answer = models.TextField()

class Feedback(models.Model):
    user = models.ForeignKey(User)
    responses = models.ManyToManyField(Response)
    response_time = models.DateTimeField(auto_now_add=True)

【问题讨论】:

  • 您是否有特定原因要像这样拆分FeedbackReponse?多个问题可以一个答案吗?
  • 我将反馈和响应分开,因为模型的其他部分已被拉出以在此问题中保留“仅重要的东西”。一个响应兼作“选择”问题或评级问题的一组答案。例如,一个问题“你如何评价......”将有 5 个可能的回答(并且只有 5 个)1 星、2 星、等等。同样,“单选”和“多选”问题也会有一组特定的回答。这个问题不是关于如何修改这些模型,而是关于如何对我想从这些模型中收集的统计数据进行建模。

标签: django django-models dynamically-generated django-statistics


【解决方案1】:

这将满足您的要求:

class QuestionType(models.Model):
    name = models.CharField(max_length=256, blank=True, default="")

class Question(models.Model):
    text = models.TextField()
    type = models.ForeignKey(QuestionType)

    def how_many_ratings_where_x_stars(self, stars):
        return self.rating_set.filter(stars=stars).count()

    def average_rating(self, stars):
        return self.rating_set.aggregate(models.Avg('stars'))['stars__avg']

class Response(models.Model):
    question = models.ForeignKey(Question)
    answer = models.TextField()
    user = models.ForeignKey(User)
    timestamp = models.DateTimeField(auto_now_add=True)

class Rating(models.Model):
    question = models.ForeignKey(Question)
    stars = models.PositiveIntegerField(min_value=1, max_value=5)
    user = models.ForeignKey(User)
    timestamp = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = [('question', 'user')]

【讨论】:

  • 正如我之前所说,模型只是为了显示我正在处理的内容但不需要更改,我想知道我应该做什么(模型或其他方式)收集有关模型的统计信息。例如:有多少人对(问题...)回答“是”或“否”,对(...)的平均评分是多少,等等。
猜你喜欢
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多