Django评级系统

时间:2011-02-10 02:04:09

标签: 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文档,但我仍然不确定如何解决这个问题。

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

1 个答案:

答案 0 :(得分:1)

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

使用现有的评级应用可能比从头开始更好。他们已经拥有文档,因此您可以快速启动并运行它们,并为您处理数据库设计。

Django Ratings

Django Valuate