有没有办法在Django模型中拥有类似于dictinary的字段?

时间:2017-04-10 11:01:31

标签: python django django-models django-model-utils

假设,我正在制作一部电影评级应用。登录用户应该可以使用星标(在1到5范围内)为电影评分。

我想快速访问所有评分者的名字及其评分。 如果用户再次为电影评分,则应更新评级。同时,如果用户决定撤销他的评级,即提供零评级,我想从该字段中删除该条目。

我相信词典是实现同样目标的最佳选择。但是,我愿意接受建议。

我还希望用户看到他/她评级的所有电影以及评级。

4 个答案:

答案 0 :(得分:2)

您应该在用户模型和投票模型之间创建一个ForeignKey字段。每个用户只允许一次投票;对于每部电影,您可能希望在投票模型上,在userid和movieid上创建唯一的键约束。

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

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

要提高计算投票的速度和性能,您可能需要查看缓存,只需缓存投票数,并在每次用户在特定影片上添加/撤回投票时更新投票数。

答案 1 :(得分:0)

您可以使用:django ORM的update_or_create()方法。 https://docs.djangoproject.com/en/1.10/ref/models/querysets/#update-or-create

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您是否使用单个模板标记检查了Django模型的django-star-ratings星级评分。