【问题标题】:How do I selectively mark books read by a user in the frontend if I have a common dataset of books and a dataset of the particular books read?如果我有一个共同的书籍数据集和一个特定阅读书籍的数据集,如何在前端选择性地标记用户阅读的书籍?
【发布时间】:2021-12-07 00:57:17
【问题描述】:

我在 django 中有一个“书籍”模型,它存储名称、作者等信息(此处不相关,仅提及一些上下文)。我使用分页器显示所有这些信息,每个用户都可以选择标记他/她读过的书。为了标记它们,我能想到的是创建另一个名为“BookStatus”的模型,每次用户阅读一本书时我都会在其中插入新条目。我也想过这样做,因为我想存储额外的信息,比如阅读这本书的时间以及用户阅读它的时间。但是,我无法弄清楚如何在前端显示时实际显示用户在书名旁边阅读了某些特定的书。实现此目的最简单的方法是什么?

简而言之,我有一个所有用户通用的图书数据库。对于每个用户,我想存储他/她读过的书以及他们阅读的时间以及他们花了多长时间(全部由用户输入),并在显示那些我希望能够的普通书时在前端将它们标记为已读/未读。

【问题讨论】:

  • 只需在您的图书模型中添加一个多对多字段,例如read_by = models.ManyToManyField(User,blank=True,null=True),您可以在模板中签入,如果用户在 read_by 中,则表示他阅读了该书,否则他没有阅读。跨度>
  • 取布尔字段。 Like : has_read = models.BooleanField(default=Flase) 然后在用户阅读本书时更新字段。
  • @mehedi 看到你的 cmets 后很抱歉,我意识到我不能这样做,因为我还想存储一些额外的信息。编辑了我的问题。
  • 在数据库中添加日期时间字段(打开时间)和持续时间字段(读取时间)。当用户打开这本书时,向您的 api 发送一个帖子请求以添加打开时间。然后开始用 js 计算时间。当用户关闭选项卡或退出读取命中 api 以更新持续时间时

标签: python django


【解决方案1】:

我认为你在正确的轨道上。这是您可以执行的操作的示例:

class BookStatus(models.Model):
    book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name='book')
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user')
    read = models.BooleanField(default=False)
    duration = models.DurationField(blank=True, null=True)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"{self.user.username} is reading {self.book.name}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多