投票系统的Django模型

2024-05-15 02:57:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我写的网站评级书籍,我不确定如何实现投票系统的登录用户。用户应该能够从1-10评分书,当然,系统应该记住他的投票,计数所有的投票和计算平均率。在

假设我有以下模型:

class Book(models.Model):
    title = models.CharField(max_length=30)
    author = models.ForeignField(Author)
    #... other fields

以及

^{pr2}$

现在我可以将rate和rates\u count字段添加到Book中,但我需要记住用户的投票。很明显,我在书本课上需要很多领域,我觉得这样应该可以:

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

我想知道我是否需要书本课的费率和费率。因为我可以从投票模型中计算出他们的价值。对我来说,有几个未知数:

数据库引擎(比如PostgreSQL)计算所选书籍的平均速率(加上并计算所有投票的投票数[平均速率=添加的所有投票数/投票数])的速度/速度,以及如何计算1000000票的速度。操作时间增长是否恒定?如果我的电脑比服务器慢1000倍,计算所需的时间是否也是线性的?在

抱歉,如果我的问题是愚蠢的,但我没有数据库编程的经验。谢谢你的回答。在


Tags: 用户模型modelratetitlemodels投票速度
1条回答
网友
1楼 · 发布于 2024-05-15 02:57:51

虽然不是ORM和Django方面的专家,但大多数SQL数据库都有可以快速计算的总数。如果你有一个数值字段作为一个评分,数学将是相当容易和快速的,并在一个最多两个数据库的SQL调用(你也将需要计数的记录数)。检查django ORM是否有总计(我相信它有),否则(我确信django ORM也提供直接SQL),您可能需要编写一个自定义SQL查询来计算速率。这样的查询将过滤所需的图书标识

扩大算法的规模并不是小事。我想你也许应该把这个问题分开,一个是关于模型的,另一个是关于性能的,一旦你有了一些模型(也许还有其他的模型)

相关问题 更多 >

    热门问题