2

我正在为 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)
4

1 回答 1

0

这将满足您的要求:

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')]
于 2012-11-15T15:37:32.910 回答