#python #django
Вопрос:
У меня есть модель «Книги» в django, в которой хранится такая информация, как имя, автор и т. Д. (Здесь не имеет значения, просто упоминание для некоторого контекста). Я отображаю всю эту информацию с помощью пагинатора, и у каждого пользователя есть возможность пометить книги, которые он/она прочитал. Чтобы отметить их, я могу придумать, как создать другую модель под названием «BookStatus», в которую я вставляю новые записи каждый раз, когда пользователь читает книгу. Я также подумал об этом, потому что хочу сохранить дополнительную информацию, такую как время, в течение которого была прочитана книга, и сколько времени пользователь потратил на ее чтение. Однако я не могу понять, как на самом деле отобразить, что пользователь прочитал какую-то конкретную книгу рядом с названием книги, отображая ее во внешнем интерфейсе. Каков был бы самый простой способ сделать это?
Короче говоря, у меня есть база данных книг, которые являются общими для всех пользователей. Для каждого пользователя я хочу хранить книги, которые он/она прочитал, а также время, в течение которого они это читали, и сколько времени им потребовалось для этого (все введено пользователем), и при отображении этих общих книг я хочу иметь возможность пометить их как прочитанные/непрочитанные на интерфейсе.
Комментарии:
1. Просто добавьте множество полей в свою модель книг, что-то вроде
read_by = models.ManyToManyField(User,blank=True,null=True)
того, что вы можете проверить в шаблоне, если пользователь находится в read_by, это означает, что он читает эту книгу, иначе он ее не читал.2. возьмем логическое поле . Например : has_read = модели. Логическое поле(по умолчанию=Flase) затем обновляет поле, когда пользователь читает книгу.
3. @mehedi извините, увидев ваши комментарии, я понял, что не могу этого сделать, потому что я также хочу сохранить некоторую дополнительную информацию. Отредактировал мой вопрос.
4. добавьте поле даты и времени(время открытия) и поле продолжительности(время чтения) в базу данных . когда пользователь открывает книгу, он отправляет запрос на публикацию в свой api, чтобы добавить время открытия . затем начните отсчет времени с помощью js . когда пользователь закрывает вкладку или завершает чтение, нажмите api для обновления на время
Ответ №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}"