1

我正在研究django的問卷模型,應該由沒有編程經驗的人維護,所以我花了很多時間來製作我的模型以彌補細節。現在我想要解開SQL數據庫查詢的潛力,以便能夠生成關於給出的響應和反饋的統計數據。建模Django模型統計

我的一個問題類型是一個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) 
+0

有沒有要分手了'Feedback'和'Reponse'這樣一個特定的原因是什麼?一個答案可以給很多問題嗎? –

+0

我分解了反饋和響應,因爲在這個問題中還有其他部分模型被拉出以保持「只是重要的東西」。作爲一個例子,「你如何評價......」這個問題將有5個可能的答案(並且只有5個)1星,2星,等等。「單選」和「多選」問題也會有一組特定的回答。這個問題不是關於如何修改這些模型,而是關於如何建模*統計信息*我想從這些模型中收集。 –

回答

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')] 
+0

正如我前面所說,模型只是爲了顯示我正在處理的內容,但不需要改變,我想知道我應該怎麼做(模型或其他方式)來收集有關模型的統計信息。例如:有多少人回答'是'或'否'(問題...),給予(...)的平均評分是多少等等。 –