我正在编写网站来评级书籍,但我不确定如何为登录用户实施投票系统。用户应该能够从 1-10 对图书进行评分,当然,系统应该记住他的投票,计算所有投票并计算平均评分。
可以说我有以下模型:
class Book(models.Model):
title = models.CharField(max_length=30)
author = models.ForeignField(Author)
#... other fields
和
class User(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=30)
#... other fields
现在我可以将 rate 和 rates_count 字段添加到 Book,但我需要记住用户的投票。显然我需要 Book 类中的 ManyToMany 字段,我认为这样的事情应该没问题:
class Vote(models.Model):
user_who_voted = models.ForeignField(User)
rated_book = models.ForeignField(Book)
rate_date = models.DateField()
rate = models.ForeignField(User)
class Book(models.Model):
title = models.CharField(max_length=30)
author = models.ForeignField(Author)
votes = models.ManyToManyField(through='Vote')
#... other fields
我想知道在 Book 课中我是否需要 rate 和 rates_count。因为我可以从 Vote 模型中计算它们的值。对我来说,这里有几个未知数:
比方说,PostgreSQL 数据库引擎的快/慢速度如何计算所选书籍的平均率,(添加和计算所有投票投票 [平均率 = 所有添加的投票/投票数]) 10000 票,以及如何计算 1000000 票。操作时间是否保持不变?如果我的 PC 比服务器慢 1000 倍,那么计算所需的时间也是线性的吗?
对不起,如果我的问题很愚蠢,但我在数据库编程方面没有经验。谢谢你的任何答案。