2017-04-10 54 views
1

假设我正在制作电影评级应用程序。登录的用户应该能够用星星评价电影(范围从1到5)。有没有办法在Django模型中拥有类似字典的字段?

我想快速访问所有的评价者的名字以及他们的评价。 如果用户再次对影​​片进行评级,评级应该更新。同时,如果用户决定退出其评级,即提供零评级,我想从现场删除该条目。

我相信字典是实现这个目标的最佳选择。不过,我很乐意提供建议。

我也希望用户看到他/她评分的所有电影。

回答

0

如果您正在使用的数据库是Postgres的,那么你可以利用JSONField

+0

我不能推荐JSONField,因为多个用户可能想要同时在电影上投票,而数据库将不得不一次又一次地重写值,锁定电影的投票时间。这肯定会是一个瓶颈。 – Iwan1993

+0

@ Iwan1993我认为你最好使用单独的模型进行用户投票和评分,在这种情况下 – dentemm

2

你应该在用户模式和投票模型之间创建一个ForeignKey的领域。只允许每个用户进行一次投票;每部电影中,您可能希望在投票模型上通过用户标识和电影ID创建唯一的键约束。

投票应该包含与电影和评级的关系。如果用户撤回他的投票,则将其从数据库中删除。

使用字典会导致您的问题,因为您将有多部电影。

为了提高计票速度和性能,您可能需要查看缓存并简单地缓存投票数,并在用户针对特定影片每次添加/撤回投票时更新该数字。

+0

你是对的,建模这绝对是最好的方式去 – dentemm

相关问题