假设我正在制作电影评级应用程序。登录的用户应该能够用星星评价电影(范围从1到5)。有没有办法在Django模型中拥有类似字典的字段?
我想快速访问所有的评价者的名字以及他们的评价。 如果用户再次对影片进行评级,评级应该更新。同时,如果用户决定退出其评级,即提供零评级,我想从现场删除该条目。
我相信字典是实现这个目标的最佳选择。不过,我很乐意提供建议。
我也希望用户看到他/她评分的所有电影。
假设我正在制作电影评级应用程序。登录的用户应该能够用星星评价电影(范围从1到5)。有没有办法在Django模型中拥有类似字典的字段?
我想快速访问所有的评价者的名字以及他们的评价。 如果用户再次对影片进行评级,评级应该更新。同时,如果用户决定退出其评级,即提供零评级,我想从现场删除该条目。
我相信字典是实现这个目标的最佳选择。不过,我很乐意提供建议。
我也希望用户看到他/她评分的所有电影。
您可以使用:update_or_create()方法与django ORM。 https://docs.djangoproject.com/en/1.10/ref/models/querysets/#update-or-create
如果您正在使用的数据库是Postgres的,那么你可以利用JSONField
你应该在用户模式和投票模型之间创建一个ForeignKey的领域。只允许每个用户进行一次投票;每部电影中,您可能希望在投票模型上通过用户标识和电影ID创建唯一的键约束。
投票应该包含与电影和评级的关系。如果用户撤回他的投票,则将其从数据库中删除。
使用字典会导致您的问题,因为您将有多部电影。
为了提高计票速度和性能,您可能需要查看缓存并简单地缓存投票数,并在用户针对特定影片每次添加/撤回投票时更新该数字。
你是对的,建模这绝对是最好的方式去 – dentemm
您是否检查过django-star-ratings,使用单个模板标记为您的Django模型提供星级评分。
我不能推荐JSONField,因为多个用户可能想要同时在电影上投票,而数据库将不得不一次又一次地重写值,锁定电影的投票时间。这肯定会是一个瓶颈。 – Iwan1993
@ Iwan1993我认为你最好使用单独的模型进行用户投票和评分,在这种情况下 – dentemm