【问题标题】:DB Design for a show tracker节目跟踪器的数据库设计
【发布时间】:2016-10-11 14:34:31
【问题描述】:

我正在设计一个允许我跟踪我的电视节目的页面。我把数据库模型弄下来了,但有一件事我不确定。我想要它,以便如果用户观看了一集,他们可以将这一集标记为已观看,但我不知道它是否应该是 ForeignKey/ManyToMany 或者由于某些用户可以观看这一集的事实,其他人没有.. :\

有人对这个问题有什么建议吗?我正在考虑制作一个名为 episodeWatched 的新模型,但仅仅为此复制模型效率不高。

【问题讨论】:

  • 一个用户可以看多集吗?一个情节可以被多人观看吗?我不确定这里到底要问什么
  • 是的,一个用户可以看很多集,一个集可以被很多人看。
  • 听起来像是多对多的关系。我会创建一个模型(将其称为 UserEpisodeWatched 或任何您喜欢的名称),并让它保存用户的 ID 和剧集的 ID。应该不会太贵,因为你只有两列。

标签: django python-2.7 django-models


【解决方案1】:

使用 ManyToManyField,在 User 模型或您的用户配置文件模型中添加

episodes=models.ManyToManyField(Episode)

在用户观看时添加剧集

user.episodes.add(episode)

查找用户观看过的所有剧集

Episode.objects.filter(user=user)

或者做相反的事情,即根据你想要做的事情将users 字段添加到Episode 模型

Django 文档列出了一个类似的文章和出版物示例 - https://docs.djangoproject.com/en/1.10/topics/db/examples/many_to_many/

Django 文档还解释了如何使用另一个模型来存储有关关系的额外字段,例如,您可以使用它来存储用户观看剧集的时间。

https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 2018-10-02
    • 2016-10-06
    • 2010-12-25
    • 2012-05-30
    相关资源
    最近更新 更多