2011-02-10 180 views
1

我正在研究一个需要评分系统的项目,他们可以评估房子的质量。他们会从管理面板中完成它,所以这不是访问者会评价的内容。Django评分系统

例如,对于每件物品,他们可以从1-5星级评分: 地点: 客房: 餐厅推荐: 社区: 总评:

在我的models.py文件,我有此设置:

Class Listing (models.Model): 

... 

    RATING_CHOICES = (
     (1, 1), 
     (2, 2), 
     (3, 3), 
     (4, 4), 
     (5, 5), 
    ) 
    location_rating = models.DecimalField(choices = RATING_CHOICES, max_digits=3, decimal_places=2) 
    room_rating = models.DecimalField(choices = RATING_CHOICES, max_digits=3, decimal_places=2) 
    dining_options_rating = models.DecimalField(choices = RATING_CHOICES, max_digits=3, decimal_places=2) 
    community_rating = models.DecimalField(choices = RATING_CHOICES, max_digits=3, decimal_places=2) 
    recreation_rooms_rating = models.DecimalField(choices = RATING_CHOICES, max_digits=3, decimal_places=2) 
    def __unicode__(self): 
     return self.name 

    def get_avg_rating(self): 
     avg_rating = (self.location_rating + self.room_rating + self.recreation_rooms_rating + self.dining_options_rating + self.community_rating)/5 
     return avg_rating 

我打算用小CSS显示评分。只是将room_rating或avg_rating放在模板标记中不起作用,所以我假设我必须向views.py添加一些代码行。我检查了Django文档,但我仍然不确定如何去解决这个问题。

这似乎是应该很容易做的事情,但我不确定从哪里开始。

+0

属性需要从他们的对象进行访问。他们也需要存在。 – 2011-02-10 02:11:07

回答

1

您采取的方向存在的潜在问题是,您只能为每个商家信息存储一组评分。如果用户B想要为列表评分,他将不得不覆盖用户A的评分。您不必将评分放入列表中,您需要将评分分为单独的评分表,并在列表和评分之间使用ManytoMany关系。这样,您可以让多个用户对特定列表进行评分,然后您可以计算并显示每个列表的平均值。请参阅this discussion以供参考。

使用现有评分应用可能会比从头开始更好。他们已经有文档,所以你可以快速启动它们,并且为你处理数据库设计。对象的

Django Ratings

Django Valuate

+0

比如说,一间公寓只需要评分一次。我想我可以创建一个单独的类,并使用ForeignKey而不是ManyToMany? models.DecimalField现在显示。我拿出选项选项。它显示为3.50等,现在我只需要将它转换为星星。 – AAA 2011-02-11 04:15:11